description: Alice gave Bob two integers a and b (a > 0 and b ≥ 0). Being a curious boy, Bob wrote down an array of non-negative integers with \operatorname{MEX} value of all elements equal to a and \operatorname{XOR} value of all elements equal to b.
  
  What is the shortest possible length of the array Bob wrote?
  
  Recall that the \operatorname{MEX} (Minimum EXcluded) of an array is the minimum non-negative integer that does not belong to the array and the \operatorname{XOR} of an array is the [bitwise XOR](https://en.wikipedia.org/wiki/Bitwise_operation#XOR) of all the elements of the array.
  
  Input
  
  The input consists of multiple test cases. The first line contains an integer t (1 ≤ t ≤ 5 ⋅ 10^4) — the number of test cases. The description of the test cases follows.
  
  The only line of each test case contains two integers a and b (1 ≤ a ≤ 3 ⋅ 10^5; 0 ≤ b ≤ 3 ⋅ 10^5) — the \operatorname{MEX} and \operatorname{XOR} of the array, respectively.
  
  Output
  
  For each test case, output one (positive) integer — the length of the shortest array with \operatorname{MEX} a and \operatorname{XOR} b. We can show that such an array always exists.
  
  Example
  
  Input
  
  
  5
  1 1
  2 1
  2 0
  1 10000
  2 10000
  
  
  Output
  
  
  3
  2
  3
  2
  3
  
  Note
  
  In the first test case, one of the shortest arrays with \operatorname{MEX} 1 and \operatorname{XOR} 1 is [0, 2020, 2021].
  
  In the second test case, one of the shortest arrays with \operatorname{MEX} 2 and \operatorname{XOR} 1 is [0, 1].
  
  It can be shown that these arrays are the shortest arrays possible.
solution: #include <bits/stdc++.h>
  using namespace std;
  const long long mod = 1e9 + 7;
  void f() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
  }
  queue<pair<int, int>> q;
  int n, m, ai, aj;
  bool vis[2005][2005] = {};
  bool lev[2005][2005];
  int h[] = {1, 0, 0, -1};
  int v[] = {0, -1, 1, 0};
  bool check(int i, int j) {
    if (i > 0 && i <= n && j > 0 && j <= m) {
      return 1;
    }
    return 0;
  }
  void dfs(int i, int j) {
    vis[i][j] = 1;
    for (int ii = 0; ii < 9; ii++) {
    }
  }
  void bfs() {
    while (!q.empty()) {
      int f = q.front().first, s = q.front().second;
      q.pop();
      vis[f][s] = 1;
      for (int ii = 0; ii < 4; ii++) {
        cout << check(f + h[ii], s + v[ii]);
        if (check(f + h[ii], s + v[ii]) && vis[f + h[ii]][s + v[ii]] == 0) {
          vis[f + h[ii]][s + v[ii]] = 1;
          q.push({f + h[ii], s + v[ii]});
          lev[f + h[ii]][s + v[ii]] = lev[f][s] + 1;
          ai = f + h[ii];
          aj = s + v[ii];
          cout << ai << " " << aj << endl;
        }
      }
    }
  }
  int main() {
    f();
    long long arr[300005] = {};
    for (int i = 1; i <= 3e5; i++) {
      arr[i] = arr[i - 1] ^ i;
    }
    int t;
    cin >> t;
    while (t--) {
      int n, m;
      cin >> n >> m;
      if (arr[n] == m)
        cout << n + 2;
      else if (arr[n - 1] == m) {
        cout << n;
      } else {
        cout << n + 1;
      }
      cout << endl;
    }
  }
  