#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=4e5+10;
int t,n,m,q,k,a[maxn],ans,st[maxn][40],pre[maxn];
struct node
{
int val,id;
}b[maxn];
bool operator < (node x,node y){return x.val>y.val;};
void init()
{
ans=1e9;
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>a[i],a[i+n]=a[i];
}
inline void ST()
{
for(int i=1;i<=2*n;i++) st[i][0]=a[i];
for(int j=1;(1ll<<j)<=2*n;j++)
{
for(int i=1;i+(1ll<<j)-1<=2*n;i++)
{
st[i][j]=st[i][j-1]|st[i+(1ll<<(j-1))][j-1];
}
}
}
inline int query(int x,int y)
{
int z=log2(y-x+1);
return st[x][z]|st[y-(1ll<<z)+1][z];
}
inline void binary(int i,int l,int r)
{
if(l==r)
{
int num=query(i,i+l-1);
if(b[m].val!=num && i+l-1!=n+1) b[++m]={num,(l-1-(i+l-1>n+1))*n+i};
return;
}
int mid=(l+r)>>1;
if(query(i,i+l-1)==b[m].val && query(i,i+r-1)==b[m].val) return;
binary(i,l,mid);
binary(i,mid+1,r);
}
void work()
{
m=0;
for(int i=1;i<=n;i++)
{
b[++m]={a[i],i};
binary(i,2,n);
}
sort(b+1,b+m+1);
pre[0]=1e18;
for(int i=1;i<=m;i++) pre[i]=min(pre[i-1],b[i].id);
}
void answer()
{
while(q--)
{
int x;
cin>>x;
if(b[1].val<=x) cout<<"-1\n";
else
{
ans=lower_bound(b+1,b+m+1,(node){x,1000000})-b-1;
cout<<pre[ans]<<endl;
}
}
}
signed main()
{
cin>>t;
while(t--)
{
init();
ST();
work();
answer();
}
return 0;
}