def build_tree(v, a, tree, tl, tr): if tl==tr: tree[v]=a[tl] else: tm=(tl+tr)//2 build_tree(2*v, a, tree, tl, tm) build_tree(2*v+1, a, tree, tm+1, tr) tree[v]=tree[2*v]&tree[2*v+1]
def query(v, tree, tl, tr, l, r): if l>r: return 0xFFFFFFFF elif l==tl and r==tr: return tree[v] else: tm=(tl+tr)//2 return query(2*v, tree, tl, tm, l, min(r, tm)) & query(2*v+1, tree, tm+1, tr, max(l, tm+1), r)
def solve(): n=int(input()) a=list(map(int, input().strip().split()))
tree=[0 for i in range(4*n)]
build_tree(1, a, tree, 0, n-1)
q=int(input())
for j in range(q):
l, k=map(int, input().strip().split())
l-=1
left=l
right=n-1
while right-left>1:
mid=(left+right)//2
if query(1, tree, 0, n-1, l, mid) >= k:
left=mid
else:
right=mid-1
# right<=left+1
r=l
if right==left+1 and query(1, tree, 0, n-1, l, right) >= k:
r=right
else:
r=left
if query(1, tree, 0, n-1, l, r) < k:
print(-1, end=' ')
else:
print(r+1, end=' ')
print()
return