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>
  const unsigned int MOD = 1000000007;
  const long double u = 1e+9;
  using namespace std;
  int main() {
    int t;
    cin >> t;
    while (t--) {
      int n, m;
      cin >> n >> m;
      int p = m + 1;
      string n1 = "";
      string m1 = "";
      int z = 1;
      int w = 1 << 30;
      while (z < w) {
        int d = z & n;
        if (d == z) {
          n1 = "1" + n1;
        } else {
          n1 = "0" + n1;
        }
        z <<= 1;
      }
      z = 1;
      while (z < w) {
        int d = z & p;
        if (d == z) {
          m1 = "1" + m1;
        } else {
          m1 = "0" + m1;
        }
        z <<= 1;
      }
      string h = "";
      z = 0;
      for (int i = 0; i < n1.size(); i++) {
        if (z == 1) {
          h += "0";
          continue;
        }
        if (n1[i] == m1[i]) {
          h += "0";
          continue;
        }
        if (n1[i] > m1[i]) {
          h += "0";
          z = 1;
          continue;
        }
        if (n1[i] < m1[i]) {
          h += "1";
        }
      }
      int j = 0;
      reverse(h.begin(), h.end());
      for (int i = 0; i < h.size(); i++) {
        j += (h[i] - '0') * pow(2, i);
      }
      cout << j << endl;
    }
  }
  