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