要让异或后的值尽量大,那就应该让两个数的对于位置的值尽量不一样
从l,r的最高位开始看,如果相同,那异或之后就是0了,因此直接不考虑
继续往后面的位置看,当他们不一样的时候,一定是l当前位为0,r当前为1
假如当前是第i位,那么l一定小于2^i,并且之后的每一位,都可以在异或后得到1
所以,直接把l,r异或,然后将每一位都改成1就是最终答案了

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#define ll long long
#define pi 3.1415927
#define inf 0x3f3f3f3f
#define mod 1000000007
using namespace std;
#define _int __int128_t
inline ll read()
{
    ll x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=getchar();
    return f*x;
}
void print(ll x)
{
    if(x < 0) {putchar('-');x = -x;}
    if(x/10) print(x/10);
    putchar(x%10+'0');
}
ll n,m;
int main ()
{
    ll T,i,t,j,k,p,sum=0;
    cin>>T;
    while(T--)
    {
        j=read(); k=read();
        p=j^k;
        sum=0;
        while(p){
            p>>=1;
            sum=sum<<1|1;
        }
        cout<<sum<<endl;
    }

    return 0;
}