rt

input :
3
5
15 14 17 42 34
3
1 7
2 15
4 5
5
7 5 3 1 7
4
1 7
5 7
2 3
2 2
7
19 20 15 12 21 7 11
4
1 15
4 4
7 12
5 7
output:
2 -1 5
1 5 2 2
2 6 -1 5
# include <bits/stdc++.h>
//# define int long long
# define rint register int
# define up(i ,x, y) for(rint i = x; i <= y ; i ++)
# define dn(i ,x ,y) for(rint i = x; i >= y ;i --)
inline int read ();
inline void write (int x);
inline void writesp (int x);
inline void writeln (int x);
using namespace std;
const int N = 1e5 + 10;
int n ,a[N] ,pre[N];
inline void fre (){
freopen ("and.in" ,"r" ,stdin);
freopen ("and.out", "w" ,stdout);
} struct segment_tree{int l ,r, ands;}tr[N << 2];
inline void pushup(int u){
tr[u].ands = (tr[u << 1].ands & tr[u << 1 | 1].ands);
}inline void build (int u ,int L ,int R){
tr[u].l = L ,tr[u].r = R;
if(L == R) {tr[u].ands = a[L] ; return ;}
int mid = ((L + R) >> 1ll);
build (u << 1 ,L ,mid);
build (u << 1 | 1 ,mid + 1, R);
pushup(u);
} inline int query (int u ,int L ,int R){
int l = tr[u].l ,r = tr[u].r;
if(l >= L && r <= R) return tr[u].ands;
int mid = ((l + r) >> 1ll) ,ans = 0;
if(L <= mid) ans = query (u << 1 ,L ,R);
if(mid < R){
if(!ans) ans = query(u << 1 | 1 ,L ,R);
else ans &= query (u << 1 | 1 ,L , R);
}
return ans;
} inline void solve (){
n = read ();
up(i, 1, n) a[i] = read ();
build (1 ,1, n);
int Q = read ();
while(Q --){
int lft = read () , k = read () ,l = lft ,r = n ,res = 0;
while(l <= r){
int mid = ((l + r) >> 1ll);
if(query (1 ,lft ,mid) < k) r = mid - 1;
else l = mid + 1 ,res = mid;
} if(!res) writesp(-1) ; else writesp(res);
} puts("");
} signed main(){
// fre ();
int _ = read ();
while (_ --) solve ();
return 0;
}
/*
3
7
19 20 15 12 21 7 11
4
1 15
4 4
7 12
5 7
5
15 14 17 42 34
3
1 7
2 15
4 5
5
7 5 3 1 7
4
1 7
5 7
2 3
2 2
*/
inline int read (){
int s = 0;bool w = 0 ;char c = getchar ();
while(!isdigit(c)){
w |= (c == '-');
c = getchar ();
} while (isdigit (c)){
s = (s << 1 ) + (s << 3) + (c ^ 48);
c = getchar ();
} return w ? -s : s;
} inline void write(int x){
if(x < 0) x = -x ,putchar ('-');
if(x > 9) write(x / 10);
putchar (x % 10 | 48);
} inline void writesp(int x){
write (x) ,putchar (' ');
} inline void writeln(int x){
write (x) ,putchar ('\n');
}