#PX0031. 兔子的区间密码

兔子的区间密码

题目描述

对于给定的区间 ll 到 rr ,从中选择两个整数 xx 和 yy ,使得他们异或后得到的值 x⊕yx \oplus y 最大。输出这个最大值。

你需要处理多组询问。

其中,⊕\oplus 表示按位异或运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节 。

输入格式

每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤104)T\left(1\leq T\leq 10^4\right) 代表数据组数,每组测试数据描述如下:

在一行上输入两个整数 l,r(0≤l≤r≤1018)l, r \left(0\leq l\leq r\leq 10^{18}\right) 代表区间的左右端点。

输出格式

对于每一组测试数据,在一行上输出一个整数,代表能够得到的最大的 x⊕yx\oplus y 。

输入样例

5
2 3
1 10
3 4
5 5
2 5

输出样例

1
15
7
0
7

说明/提示

在第一组测试数据中,一共有三种不同的选取方式:
∙\bulletx=2x=2 且 y=2y=2 ,x⊕y=0x \oplus y = 0 ;
∙\bulletx=2x=2 且 y=3y=3 ,x⊕y=1x \oplus y = 1 ;
∙\bulletx=3x=3 且 y=3y=3 ,x⊕y=0x \oplus y = 0 ;
综上,最大值为 11 。