#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"; } }