#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int>pp;
#define N 500002
#define Q 500002
int INF = (1 << 30) + 7;
int n,m,q;
int suff[N], a[N];
pp queries[Q];
int bestInterval[N];
int whereInSegment[Q];
int st[N * 10], lazy[N * 10];
struct Event {
int type, idx, pos;
Event(int type = 0, int idx = 0, int pos = 0) : type(type), idx(idx), pos(pos) {}
bool operator <(const Event&x) const {
if (pos != x.pos) return pos < x.pos;
return type < x.type;
}
};
struct trie {
trie* a[2];
int cnt, minIndex;
trie() {
memset(a,0,sizeof a);
cnt = 0, minIndex = INF;
}
void insert(int x, int &index, int i = 29) {
cnt++; minIndex = index;
if (i == -1) { return ; }
int bit = (x & (1 << i)) != 0;
if (a[bit] == 0) a[bit] = new trie();
a[bit]->insert(x, index, i - 1);
}
int query(int x, int i = 29, bool isBigger = false) {
if (i == -1) { return minIndex; }
int bit = (x & (1 << i)) != 0;
int mbit = (m & (1 << i)) != 0;
if (isBigger) {
trie*best = new trie(); if (a[0]) best = a[0];
if (a[1] && a[1]->minIndex < best->minIndex) best = a[1];
return best->query(x, i - 1, true);
} else {
if (mbit == 0) {
int c1 = -1, c2 = -1;
if (bit == 0) {
if (a[0]) c1 = a[0]->query(x, i - 1, false);
if (a[1]) c2 = a[1]->query(x, i - 1, true);
} else {
if (a[0]) c1 = a[0]->query(x, i - 1, true);
if (a[1]) c2 = a[1]->query(x, i - 1, false);
}
if (c1 == -1 && c2 == -1) return -1;
else if (c1 != -1 && c2 != -1) return min(c1,c2);
else if (c1 != -1) return c1;
else return c2;
} else {
if (bit == 0) {
if (a[1] == 0) return -1;
return a[1]->query(x, i - 1, false);
} else {
if (a[0] == 0) return -1;
return a[0]->query(x, i - 1, false);
}
}
}
}
void clear() {
for(int i=0; i<2; i++) {
if (a[i]) a[i]->clear();
delete a[i];
a[i] = 0;
}
}
};
//*******SEGMENT TREE ************
void pushLazy(int p, int l, int r) {
if (lazy[p] != INF) {
if (l != r) {
lazy[p*2] = min(lazy[p], lazy[p*2]);
lazy[p*2+1] = min(lazy[p], lazy[p*2+1]);
}
st[p] = min(st[p], lazy[p]);
lazy[p] = INF;
}
}
void build(int p =1 , int l = 1, int r = q) {
lazy[p] = INF;
if (l == r) { st[p] = INF; return ; }
int mid = (l+r) >> 1;
build(p*2, l, mid);
build(p*2+1,mid+1,r);
st[p] = INF;
}
void update(int i, int j, int val, int type, int p = 1, int l = 1, int r = q) {
pushLazy(p, l, r);
if (i > r || j < l) return ;
if (i <= l && j >= r) {
if (type == 0) st[p] = val;
else lazy[p] = val, pushLazy(p, l, r);
return ;
}
int mid = (l+r) >> 1;
update(i, j, val, type, p*2, l, mid);
update(i, j, val, type, p*2+1, mid+1, r);
st[p] = min(st[p*2], st[p*2+1]);
}
int query(int i, int p = 1, int l = 1, int r = q) {
pushLazy(p, l, r);
if (i > r || i < l) return INF;
if (l == r) { return st[p]; }
int mid = (l+r) >> 1;
return min(query(i, p * 2, l, mid), query(i, p*2+1, mid+1, r));
}
//******************************
void solveTrie() {
trie* tr = new trie();
for(int i=n; i>=1; i--) {
tr->insert(suff[i + 1], i);
bestInterval[i] = tr->query(suff[i]);
}
}
int main() {
int t; scanf("%d", &t);
while(t--) {
scanf("%d%d%d", &n,&m,&q);
for(int i=1; i<=n; i++) scanf("%d", &a[i]);
suff[n + 1] = 0;
for(int i=n; i>=1; i--) suff[i] = suff[i + 1] ^ a[i];
vector<pp> ends;
for(int i=1; i<=q; i++) {
scanf("%d%d", &queries[i].first, &queries[i].second);
ends.push_back(make_pair(queries[i].second, i));
}
sort(ends.begin(), ends.end());
for(int i=0; i<(int)ends.size(); i++) whereInSegment[ends[i].second] = i + 1;
build();
solveTrie();
vector<Event> sweep;
for(int i=1; i<=n; i++) sweep.push_back(Event(1, i, i));
for(int i=1; i<=q; i++) {
sweep.push_back(Event(0, i, queries[i].first));
}
sort(sweep.begin(), sweep.end());
for(int i=0; i<(int)sweep.size(); i++) {
Event cur = sweep[i];
if (cur.type == 0) {
update(whereInSegment[cur.idx], whereInSegment[cur.idx], INF , 0);
} else if (cur.type == 1) {
if (bestInterval[cur.idx] != -1) {
int from = lower_bound(ends.begin(), ends.end(), make_pair(bestInterval[cur.idx], -1)) - ends.begin() + 1;
update(from, q, bestInterval[cur.idx] - cur.idx + 1, 1);
}
} else assert(0);
}
for(int i=1; i<=q; i++) {
int res = query(whereInSegment[i]); if (res == INF) res = -1;
printf("%d\n", res);
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAp0eXBlZGVmIHBhaXI8aW50LGludD5wcDsKI2RlZmluZSBOIDUwMDAwMgojZGVmaW5lIFEgNTAwMDAyCmludCBJTkYgPSAoMSA8PCAzMCkgKyA3OwoKaW50IG4sbSxxOyAKaW50IHN1ZmZbTl0sIGFbTl07IApwcCBxdWVyaWVzW1FdOwppbnQgYmVzdEludGVydmFsW05dOwppbnQgd2hlcmVJblNlZ21lbnRbUV07CmludCBzdFtOICogMTBdLCBsYXp5W04gKiAxMF07CgoKc3RydWN0IEV2ZW50IHsKCWludCB0eXBlLCBpZHgsIHBvczsgCglFdmVudChpbnQgdHlwZSA9IDAsIGludCBpZHggPSAwLCBpbnQgcG9zID0gMCkgOiB0eXBlKHR5cGUpLCBpZHgoaWR4KSwgcG9zKHBvcykge30KCWJvb2wgb3BlcmF0b3IgPChjb25zdCBFdmVudCZ4KSBjb25zdCB7CgkJaWYgKHBvcyAhPSB4LnBvcykgcmV0dXJuIHBvcyA8IHgucG9zOyAKCQlyZXR1cm4gdHlwZSA8IHgudHlwZTsKCX0KfTsKCnN0cnVjdCB0cmllIHsKCXRyaWUqIGFbMl07IAoJaW50IGNudCwgbWluSW5kZXg7Cgl0cmllKCkgeyAKCQltZW1zZXQoYSwwLHNpemVvZiBhKTsgCgkJY250ID0gMCwgbWluSW5kZXggPSBJTkY7Cgl9IAoJCgl2b2lkIGluc2VydChpbnQgeCwgaW50ICZpbmRleCwgIGludCBpID0gMjkpIHsKCQljbnQrKzsgbWluSW5kZXggPSBpbmRleDsKCQlpZiAoaSA9PSAtMSkgeyByZXR1cm4gOyAgfQoJCWludCBiaXQgPSAoeCAmICgxIDw8IGkpKSAgIT0gMDsKCQlpZiAoYVtiaXRdID09IDApIGFbYml0XSA9IG5ldyB0cmllKCk7IAoJCWFbYml0XS0+aW5zZXJ0KHgsIGluZGV4LCBpIC0gMSk7Cgl9CgkKCWludCBxdWVyeShpbnQgeCwgaW50IGkgPSAyOSwgYm9vbCBpc0JpZ2dlciA9IGZhbHNlKSB7CgkJaWYgKGkgPT0gLTEpIHsgIHJldHVybiBtaW5JbmRleDsgIH0KCQlpbnQgYml0ID0gKHggJiAoMSA8PCBpKSkgIT0gMDsKCQlpbnQgbWJpdCA9IChtICYgKDEgPDwgaSkpICE9IDA7CgkJaWYgKGlzQmlnZ2VyKSB7CgkJCXRyaWUqYmVzdCA9IG5ldyB0cmllKCk7IGlmIChhWzBdKSBiZXN0ID0gYVswXTsgCgkJCWlmIChhWzFdICYmIGFbMV0tPm1pbkluZGV4IDwgYmVzdC0+bWluSW5kZXgpIGJlc3QgPSBhWzFdOwoJCQlyZXR1cm4gYmVzdC0+cXVlcnkoeCwgaSAtIDEsIHRydWUpOwoJCX0gZWxzZSB7CgkJCWlmIChtYml0ID09IDApIHsKCQkJCWludCBjMSA9IC0xLCBjMiA9IC0xOwoJCQkJaWYgKGJpdCA9PSAwKSB7CgkJCQkJaWYgKGFbMF0pIGMxID0gYVswXS0+cXVlcnkoeCwgaSAtIDEsIGZhbHNlKTsgCgkJCQkJaWYgKGFbMV0pIGMyID0gYVsxXS0+cXVlcnkoeCwgaSAtIDEsIHRydWUpOyAKCQkJCX0gZWxzZSB7CgkJCQkJaWYgKGFbMF0pIGMxID0gYVswXS0+cXVlcnkoeCwgaSAtIDEsIHRydWUpOyAKCQkJCQlpZiAoYVsxXSkgYzIgPSBhWzFdLT5xdWVyeSh4LCBpIC0gMSwgZmFsc2UpOyAKCQkJCX0KCQkJCWlmIChjMSA9PSAtMSAmJiBjMiA9PSAtMSkgcmV0dXJuIC0xOwoJCQkJZWxzZSBpZiAoYzEgIT0gLTEgJiYgYzIgIT0gLTEpIHJldHVybiBtaW4oYzEsYzIpOyAKCQkJCWVsc2UgaWYgKGMxICE9IC0xKSByZXR1cm4gYzE7IAoJCQkJZWxzZSByZXR1cm4gYzI7IAoJCQl9IGVsc2UgewoJCQkJaWYgKGJpdCA9PSAwKSB7CgkJCQkJaWYgKGFbMV0gPT0gMCkgcmV0dXJuIC0xOyAKCQkJCQlyZXR1cm4gYVsxXS0+cXVlcnkoeCwgaSAtIDEsIGZhbHNlKTsKCQkJCX0gZWxzZSB7CgkJCQkJaWYgKGFbMF0gPT0gMCkgcmV0dXJuIC0xOyAKCQkJCQlyZXR1cm4gYVswXS0+cXVlcnkoeCwgaSAtIDEsIGZhbHNlKTsKCQkJCX0KCQkJfQoJCX0KCX0KCQoJdm9pZCBjbGVhcigpIHsKCQlmb3IoaW50IGk9MDsgaTwyOyBpKyspIHsKCQkJaWYgKGFbaV0pIGFbaV0tPmNsZWFyKCk7IAoJCQlkZWxldGUgYVtpXTsgCgkJCWFbaV0gPSAwOwoJCX0KCX0KfTsKCi8vKioqKioqKlNFR01FTlQgVFJFRSAqKioqKioqKioqKioKdm9pZCBwdXNoTGF6eShpbnQgcCwgaW50IGwsIGludCByKSB7CglpZiAobGF6eVtwXSAhPSBJTkYpIHsKCQlpZiAobCAhPSByKSB7CgkJCWxhenlbcCoyXSA9IG1pbihsYXp5W3BdLCBsYXp5W3AqMl0pOwoJCQlsYXp5W3AqMisxXSA9IG1pbihsYXp5W3BdLCBsYXp5W3AqMisxXSk7CgkJfQoJCXN0W3BdID0gbWluKHN0W3BdLCBsYXp5W3BdKTsKCQlsYXp5W3BdID0gSU5GOwoJfQp9Cgp2b2lkIGJ1aWxkKGludCBwID0xICwgaW50IGwgPSAxLCBpbnQgciA9IHEpIHsKCWxhenlbcF0gPSBJTkY7CglpZiAobCA9PSByKSB7IHN0W3BdID0gSU5GOyByZXR1cm4gOyB9IAoJaW50IG1pZCA9IChsK3IpID4+IDE7IAoJYnVpbGQocCoyLCBsLCBtaWQpOwoJYnVpbGQocCoyKzEsbWlkKzEscik7IAkKCXN0W3BdID0gSU5GOwp9Cgp2b2lkIHVwZGF0ZShpbnQgaSwgaW50IGosIGludCB2YWwsIGludCB0eXBlLCBpbnQgcCA9IDEsIGludCBsID0gMSwgaW50IHIgPSBxKSB7CglwdXNoTGF6eShwLCBsLCByKTsKCWlmIChpID4gciB8fCBqIDwgbCkgcmV0dXJuIDsgCglpZiAoaSA8PSBsICYmIGogPj0gcikgeyAKCQlpZiAodHlwZSA9PSAwKSBzdFtwXSA9IHZhbDsgCgkJZWxzZSBsYXp5W3BdID0gdmFsLCBwdXNoTGF6eShwLCBsLCByKTsgCgkJcmV0dXJuIDsKCX0KCWludCBtaWQgPSAobCtyKSA+PiAxOyAKCXVwZGF0ZShpLCBqLCB2YWwsIHR5cGUsIHAqMiwgbCwgbWlkKTsgCgl1cGRhdGUoaSwgaiwgdmFsLCB0eXBlLCBwKjIrMSwgbWlkKzEsIHIpOyAKCXN0W3BdID0gbWluKHN0W3AqMl0sIHN0W3AqMisxXSk7IAp9CgppbnQgcXVlcnkoaW50IGksIGludCBwID0gMSwgaW50IGwgPSAxLCBpbnQgciA9IHEpIHsKCXB1c2hMYXp5KHAsIGwsIHIpOwoJaWYgKGkgPiByIHx8IGkgPCBsKSByZXR1cm4gSU5GOyAKCWlmIChsID09IHIpIHsgcmV0dXJuIHN0W3BdOyB9IAoJaW50IG1pZCA9IChsK3IpID4+IDE7IAoJcmV0dXJuIG1pbihxdWVyeShpLCBwICogMiwgbCwgbWlkKSwgcXVlcnkoaSwgcCoyKzEsIG1pZCsxLCByKSk7IAp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKdm9pZCBzb2x2ZVRyaWUoKSB7Cgl0cmllKiB0ciA9IG5ldyB0cmllKCk7IAoJZm9yKGludCBpPW47IGk+PTE7IGktLSkgewoJCXRyLT5pbnNlcnQoc3VmZltpICsgMV0sIGkpOyAKCQliZXN0SW50ZXJ2YWxbaV0gPSB0ci0+cXVlcnkoc3VmZltpXSk7IAoJfQp9CgppbnQgbWFpbigpIHsKCWludCB0OyBzY2FuZigiJWQiLCAmdCk7IAoJd2hpbGUodC0tKSB7CgkJc2NhbmYoIiVkJWQlZCIsICZuLCZtLCZxKTsgCgkJZm9yKGludCBpPTE7IGk8PW47IGkrKykgc2NhbmYoIiVkIiwgJmFbaV0pOwoJCXN1ZmZbbiArIDFdID0gMDsKCQlmb3IoaW50IGk9bjsgaT49MTsgaS0tKSBzdWZmW2ldID0gc3VmZltpICsgMV0gXiBhW2ldOwoJCXZlY3RvcjxwcD4gZW5kczsKCQlmb3IoaW50IGk9MTsgaTw9cTsgaSsrKSB7CgkJCXNjYW5mKCIlZCVkIiwgJnF1ZXJpZXNbaV0uZmlyc3QsICZxdWVyaWVzW2ldLnNlY29uZCk7CgkJCWVuZHMucHVzaF9iYWNrKG1ha2VfcGFpcihxdWVyaWVzW2ldLnNlY29uZCwgaSkpOwoJCX0KCQlzb3J0KGVuZHMuYmVnaW4oKSwgZW5kcy5lbmQoKSk7IAoJCWZvcihpbnQgaT0wOyBpPChpbnQpZW5kcy5zaXplKCk7IGkrKykgd2hlcmVJblNlZ21lbnRbZW5kc1tpXS5zZWNvbmRdID0gaSArIDE7IAoJCQoJCWJ1aWxkKCk7CgkJc29sdmVUcmllKCk7CgkJCgkJdmVjdG9yPEV2ZW50PiBzd2VlcDsgCgkJZm9yKGludCBpPTE7IGk8PW47IGkrKykgc3dlZXAucHVzaF9iYWNrKEV2ZW50KDEsIGksIGkpKTsKCQlmb3IoaW50IGk9MTsgaTw9cTsgaSsrKSB7CgkJCXN3ZWVwLnB1c2hfYmFjayhFdmVudCgwLCBpLCBxdWVyaWVzW2ldLmZpcnN0KSk7IAoJCX0KCQlzb3J0KHN3ZWVwLmJlZ2luKCksIHN3ZWVwLmVuZCgpKTsgCgkJZm9yKGludCBpPTA7IGk8KGludClzd2VlcC5zaXplKCk7IGkrKykgewoJCQlFdmVudCBjdXIgPSBzd2VlcFtpXTsKCQkJaWYgKGN1ci50eXBlID09IDApIHsKCQkJCXVwZGF0ZSh3aGVyZUluU2VnbWVudFtjdXIuaWR4XSwgd2hlcmVJblNlZ21lbnRbY3VyLmlkeF0sIElORiAsIDApOyAKCQkJfSBlbHNlIGlmIChjdXIudHlwZSA9PSAxKSB7CgkJCQlpZiAoYmVzdEludGVydmFsW2N1ci5pZHhdICE9IC0xKSB7CgkJCQkJaW50IGZyb20gPSBsb3dlcl9ib3VuZChlbmRzLmJlZ2luKCksIGVuZHMuZW5kKCksIG1ha2VfcGFpcihiZXN0SW50ZXJ2YWxbY3VyLmlkeF0sIC0xKSkgLSBlbmRzLmJlZ2luKCkgKyAxOyAKCQkJCQl1cGRhdGUoZnJvbSwgcSwgYmVzdEludGVydmFsW2N1ci5pZHhdIC0gY3VyLmlkeCArIDEsIDEpOwoJCQkJfQoJCQl9IGVsc2UgYXNzZXJ0KDApOwoJCX0KCQkKCQlmb3IoaW50IGk9MTsgaTw9cTsgaSsrKSB7CgkJCQoJCQlpbnQgcmVzID0gcXVlcnkod2hlcmVJblNlZ21lbnRbaV0pOyBpZiAocmVzID09IElORikgcmVzID0gLTE7CgkJCXByaW50ZigiJWRcbiIsIHJlcyk7CgkJfQoJCQoJCQoJfQoJcmV0dXJuIDA7Cn0=