#include <iostream>
using namespace std;
using cat = long long;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
while(T--) {
cat K, N;
cin >> K >> N;
if(K == 0) {
cout << N << "\n";
continue;
}
K--;
cat ans = 0;
for(int b = 0; b < 60; b++) if((N>>b)&1) {
// unset bit b, allow any bits < b that aren't in K
// bits > b same as in N, can't be in K
bool ok = true;
for(int a = b+1; a < 60; a++) if(((K&N)>>a)&1) ok = false;
if(!ok) continue;
// cout << b << " ";
cat mask = ((1LL<<b)-1);
mask -= mask & K;
// cout << mask << " ";
if(mask == 0) {
ans ^= 1LL<<b;
ans ^= ((1LL<<b)-1) & N;
continue;
}
int last = 0;
for(int a = 0; a < b; a++) if((mask>>a)&1) {
last = a;
break;
}
int v = 0;
for(int a = b-1; a >= last; a--) {
if((mask>>a)&1) v = (N>>a)&1;
else if((N>>a)&1) {
v = 1;
break;
}
}
// cout << v << " ";
if(v == 0) ans ^= 1LL<<b;
for(int a = b-1; a >= 0; a--) {
if((mask>>a)&1) {
if(mask == (1LL<<a)) ans ^= 1LL<<a;
break;
}
v = 0;
for(int c = a-1; c >= last; c--) {
if((mask>>c)&1) v = (N>>c)&1;
else if((N>>c)&1) {
v = 1;
break;
}
}
if(v == 0) ans ^= (1LL<<a);
}
}
cout << ans << "\n";
}
}