#include<cstdio>
inline int read(){
int x=0;short f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
int n,m,x,fz;
int d[42];
int find(int);
int work(int);
int main(){
n=read(),m=read();
for(int i=1;i<=n;i++){
x=read();
fz=find(x);
d[fz]++;
}
while(m--){
x=read();
printf("%d\n",work(x));
}
return 0;
}
int find(int k){
x=0;
while(!(k&1)){
x++;
k>>=1;
}
return x;
}
int work(int k){
x=0;
for(int i=42;i>=1;i--){
if(d[i]){
fz=d[i];
while(k>=(1<<i)&&fz>0){
k=k-(1<<i);
fz--;
x++;
}
}
}
if(k>0) return -1;
return x;
}