#include<iostream>
using namespace std;
int n,m,a[1000005],b[1000005],cnt=1;
int Half(int k) {
int l=1,r=n;
while(l<r) {
int mid=(l+r)/2;
if(a[mid]>=k) r=mid;
else l=mid+1;
}
if(a[l]==k) return l;
else return -1;
}
int main() {
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++) {
cin>>a[i];
if(a[i]==a[i-1]) cnt++;
if(a[i]!=a[i-1]) {
if(!cnt) {
b[i]=b[i-1]+1;
continue;
}
b[i]=b[i-1]+cnt;
cnt=1;
}
else b[i]=b[i-1];
}
while(m--) {
int k,t;
cin>>k;
t=Half(k);
if(t==-1) cout<<-1<<' ';
else cout<<b[Half(k)]<<' ';
}
cout<<'\n';
return 0;
}
注:b数组是为了O(1)找出最靠前那个