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: from collections import Counter, defaultdict
  from sys import stdin,stdout
  import io , os , sys
  #input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline
  input = stdin.readline
  
  
  def mapinput():
      return  map(int, input().split())
  
  def listinput():
      return  list( map( int, input().split()))
  
  def intinput():
      return int(stdin.readline())
  
  def strinput():
      return input().strip()
  
  def SieveOfEratosthenes(n):
      prime = [True for i in range(n + 1)]
      p = 2
      while (p * p <= n):
          if (prime[p] == True):
              for i in range(p * 2, n + 1, p):
                  prime[i] = False
          p += 1
      prime[0]= False
      prime[1]= False
      ans = []
      for p in range(n + 1):
          if prime[p]:
              ans.append(p)
      return ans
  
  def writ(ss):
      stdout.write(str(ss) + "\n")
  
  xor = []
  a = 0
  for i in range(300001):
      a ^= i 
      xor.append(a)
  
  
  for test in range(int(input())):
      def solve():
          a , b = mapinput()
          mm = xor[a-1]
  
          if mm == b:
              return a 
          aa = mm ^ b
          if aa ==  a:
              return a + 2
          return a+1
      print(solve())
  
  