usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const ll mod = 998244353; constint N = 2e5 + 10;
ll fac[N], inv[N]; ll power(ll a, int x){ ll ans = 1; while (x) { if (x & 1) ans = (ans * a) % mod; a = (a * a) % mod; x >>= 1; } return ans; } voidinit(){ fac[0] = 1; for (int i = 1; i < N; i++) { fac[i] = fac[i - 1] * i %mod; } inv[N - 1] = power(fac[N - 1], mod - 2); for (int i = N - 2; i >= 0; i--) { inv[i] = inv[i + 1] * (i + 1) % mod; } } ll C(int n, int k){ if (n < k)return0; return fac[n] * inv[k] % mod*inv[n - k] % mod; }
usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const ll mod = 998244353; constint N = 2e6 + 10;
int tot;
voidins(int x, vector<vector<int> > &ch){ int rt = 0; for (int i = 16; i >= 0; i--) { int bt = (x >> i & 1); if (!ch[rt][bt]) { int u = ++tot; ch[u][0] = ch[u][1] = 0; ch[rt][bt] = u; } rt = ch[rt][bt]; } }
int T; int l, r; int a[N];
intgetmin(int x, vector<vector<int> > &ch){ int rt = 0; int ans = 0; int pt = (1 << 16); for(int i = 16; i >= 0; i--){ int bt = ((x & pt) != 0); if(ch[rt][bt])rt = ch[rt][bt]; else{ ans |= pt; rt = ch[rt][bt ^ 1]; } pt >>= 1; } return ans; }
intgetmax(int x, vector<vector<int> > &ch){ int rt = 0; int ans = 0; int pt = (1 << 16); for(int i = 16; i >= 0; i--){ int bt = ((x & pt) != 0); if(ch[rt][bt ^ 1]){ ans |= pt; rt = ch[rt][bt ^ 1]; } else rt = ch[rt][bt]; pt >>= 1; } return ans; }
intmain(){ scanf("%d", &T); while (T--) { scanf("%d%d", &l, &r); int s = 0, t = 0; vector<vector<int> > ch((r - l + 1) * 32 , vector<int>(2 , 0)); tot = 0; for (int i = l; i <= r; i++)scanf("%d", &a[i]), s ^= a[i]; for (int i = l; i <= r; i++)t ^= i; if ((r - l + 1) & 1) { printf("%d\n", s ^ t); continue; } for(int i = l; i <= r; i++)ins(a[i], ch); for(int i = l; i <= r; i++){ int x = (l ^ a[i]); if(getmin(x, ch) == l && getmax(x, ch) == r){ printf("%d\n", x); break; } } } return0; }