MEXor Mixup
Alice gave Bob two integers $$$a$$$ and $$$b$$$ ($$$a > 0$$$ and $$$b \ge 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 of all the elements of the array.
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.
The input consists of multiple test cases. The first line contains an integer $$$t$$$ ($$$1 \leq t \leq 5 \cdot 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 \leq a \leq 3 \cdot 10^5$$$; $$$0 \leq b \leq 3 \cdot 10^5$$$) — the $$$\operatorname{MEX}$$$ and $$$\operatorname{XOR}$$$ of the array, respectively.
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.
from sys import stdin

def solve():
    results = []
    for _ in range(int(stdin.readline().strip())):
        (mex, xor) = map(int, stdin.readline().strip().split())
        ans = mex
        if (ans - 1) % 4 == 0:
            xor_ = ans - 1
        if (ans - 1) % 4 == 1:
            xor_ = 1
        if (ans - 1) % 4 == 2:
            xor_ = ans
        if (ans - 1) % 4 == 3:
            xor_ = 0
        if xor == xor_:
            results.append(ans)
            continue
        if xor_ ^ xor != mex:
            ans += 1
        else:
            ans += 2
        results.append(ans)
    print('\n'.join(map(str, results)))
if __name__ == '__main__':
    solve()
for s in [*open(0)][1:]:
    (a, b) = map(int, s.split())
    x = (0, a - 1, 1, a)[a % 4]
    print(a + (b != x) + (b ^ x == a))
for s in [*open(0)][1:]:
    (a, b) = map(int, s.split())
    x = (0, a - 1, 1, a)[a % 4]
    print(a + (b != x) + (b ^ x == a))