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: import math 
  from collections import Counter, defaultdict
  import sys
  # resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1))
  # sys.setrecursionlimit(10**6)
  
  """
  # Template Designed By: Shivshanker Singh
  # Note: If you find this template useful and want to use it then please don't just copy paste it 
          you can take ideas from this and make your own.
          because if you copy paste as it is then there are high chances that both of us will be plagiarized
          (because most of code will be same for small problems).
          So to avoid this please dont copy paste.
  """
  
  mod       = 10**9 + 7
  input     = sys.stdin.readline
  readInt   = lambda : int(input().strip())
  readfloat = lambda : float(input().strip())
  readStr   = lambda : input().strip()
  intList   = lambda : list(map(int, input().strip().split()))
  intMap    = lambda : map(int, input().strip().split())
  floatList = lambda : list(map(float, input().strip().split()))
  floatMap  = lambda : map(float, input().strip().split())
  strList   = lambda : list(input().strip().split())
  
  
  def print(*args, end='\n', sep=' '):
      for i in args:
          sys.stdout.write(str(i))
          sys.stdout.write(sep)
      sys.stdout.write(end)
  
  def get_xor(num):
      if num%4 == 0:
          return num
      elif num%4 == 1:
          return 1
      elif num%4 == 2:
          return num+1
      elif num%4 == 3:
          return 0
  
  def solve():
      exor = get_xor(a-1)
      if exor == b:
          return a
      if exor^b != a:
          return a+1
      return a+2
          
  # if __name__ == '__main__':
  for _ in range(readInt()):
      a, b = intMap()
      
      print(solve())