description: You are given two integers n and m. Find the \operatorname{MEX} of the sequence n ⊕ 0, n ⊕ 1, …, n ⊕ m. Here, ⊕ is the [bitwise XOR operator](https://en.wikipedia.org/wiki/Bitwise_operation#XOR).
  
  \operatorname{MEX} of the sequence of non-negative integers is the smallest non-negative integer that doesn't appear in this sequence. For example, \operatorname{MEX}(0, 1, 2, 4) = 3, and \operatorname{MEX}(1, 2021) = 0. 
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 30 000) — the number of test cases.
  
  The first and only line of each test case contains two integers n and m (0 ≤ n, m ≤ 10^9).
  
  Output
  
  For each test case, print a single integer — the answer to the problem.
  
  Example
  
  Input
  
  
  5
  3 5
  4 6
  3 2
  69 696
  123456 654321
  
  
  Output
  
  
  4
  3
  0
  640
  530866
  
  Note
  
  In the first test case, the sequence is 3 ⊕ 0, 3 ⊕ 1, 3 ⊕ 2, 3 ⊕ 3, 3 ⊕ 4, 3 ⊕ 5, or 3, 2, 1, 0, 7, 6. The smallest non-negative integer which isn't present in the sequence i. e. the \operatorname{MEX} of the sequence is 4.
  
  In the second test case, the sequence is 4 ⊕ 0, 4 ⊕ 1, 4 ⊕ 2, 4 ⊕ 3, 4 ⊕ 4, 4 ⊕ 5, 4 ⊕ 6, or 4, 5, 6, 7, 0, 1, 2. The smallest non-negative integer which isn't present in the sequence i. e. the \operatorname{MEX} of the sequence is 3.
  
  In the third test case, the sequence is 3 ⊕ 0, 3 ⊕ 1, 3 ⊕ 2, or 3, 2, 1. The smallest non-negative integer which isn't present in the sequence i. e. the \operatorname{MEX} of the sequence is 0.
solution: #include <bits/stdc++.h>
  using namespace std;
  long long int mod(long long int x) {
    return ((x % 1000000007 + 1000000007) % 1000000007);
  }
  long long int add(long long int a, long long int b) {
    return mod(mod(a) + mod(b));
  }
  long long int mul(long long int a, long long int b) {
    return mod(mod(a) * mod(b));
  }
  bool cmp(const int &a, const int &b) { return a > b; }
  bool comp2(pair<long long int, long long int> a,
             pair<long long int, long long int> b) {
    if (b.first > a.first) {
      return true;
    }
    if (b.first == a.first) {
      if (b.second > a.second)
        return true;
      else
        return false;
    } else
      return false;
  }
  bool isPowerOfTwo(int x) { return (x && !(x & (x - 1))); }
  int count_one(int n) {
    long long int count = 0;
    while (n) {
      n = n & (n - 1);
      count++;
    }
    return count;
  }
  bool check_set(int N, int i) {
    if (N & (1 << i))
      return true;
    else
      return false;
  }
  void possibleSubsets(char A[], int N) {
    for (int i = 0; i < (1 << N); ++i) {
      for (int j = 0; j < N; ++j)
        if (i & (1 << j)) cout << A[j];
      cout << endl;
    }
  }
  vector<long long int> v[100005];
  long long int vis[100005];
  void dfs(long long int node) {
    vis[node] = 1;
    for (auto child : v[node]) {
      if (vis[child] == 0) {
        dfs(child);
      }
    }
  }
  long long int solve() {
    long long int n;
    cin >> n;
    ;
    long long int m;
    cin >> m;
    ;
    long long int ma = 0;
    for (int i = 32; i >= 0 && n < m + 1; i--) {
      if ((n >> i & 1) == ((m + 1) >> i & 1)) continue;
      if ((m + 1) >> i & 1) {
        ma |= 1 << i;
        n |= 1 << i;
      }
    }
    return ma;
  }
  int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    cin.exceptions(cin.failbit);
    long long int t;
    cin >> t;
    ;
    while (t--) {
      cout << solve() << endl;
    }
    return 0;
  }
  