线段树

题目背景

小 W 学习了一种叫做线段树的数据结构。

题目描述

很快,小 W 就发现:线段树实在是太浪费空间了! 比如,一棵 $n=6$ 的线段树长下面这样: ![](https://cdn.luogu.com.cn/upload/image_hosting/laie1is5.png) 可以发现,只有 $11$ 个节点存储了有用信息,但使用的数组下标到了 $13$。 令 $f(n)$ 表示一棵 $n$ 个叶子节点的线段树所占的最大数组下标,现在小 W 想让你求出: $$f(l)\;\oplus\;f(l+1)\;\oplus\;f(l+2)\;\oplus\cdots \oplus\;f(r)$$ 其中,$\oplus$ 表示异或运算,相当于 C++ 中的`^`符号。

输入输出格式

输入格式


一行两个整数,表示 $l,r$,意义如上。

输出格式


一行一个整数,表示结果。

输入输出样例

输入样例 #1

6 6

输出样例 #1

13

说明

## 样例解释 $f(6)=13$,故答案为 $13$。 ## 提示 如果你不知道什么是线段树: ```cpp void build(int k,int l,int r) { if(l==r) { //do something //e.g. tree[k]=a[l] return; } int mid=(l+r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); //do something //e.g. tree[k]=tree[k<<1]+tree[k<<1|1] } ``` 翻译成人话就是:编号为 $k$ 节点有一个线段 $[l,r]$,如果 $l\neq r$,那么令 $mid=\lfloor\dfrac{l+r}2\rfloor$,它有两个子节点,左儿子编号为 $2k$,线段为 $[l,mid]$;右儿子编号为 $2k+1$,线段为 $[mid+1,r]$,然后在子节点上递归建树。 调用`build(1,1,n)`后就建好了一棵线段树,即编号为 $1$ 的结点的线段为 $[1,n]$。 ## 数据范围 对于 $10\%$ 的数据,$1\le l\le r\le10^3$。 对于 $40\%$ 的数据,$1\le l\le r\le 10^6$。 对于 $100\%$ 的数据,$1\le l\le r\le10^{15}$,答案在`long long`范围内。