#include<bits/stdc++.h>
using namespace std;
int n,a[100000001],m,item;
int confirm(int target,int low,int high)
{
int mid=(low+high)/2;
if(target>a[mid])return confirm(target,mid+1,high);
else if(target<a[mid])return confirm(target,low,mid-1);
else if(high==low)return high;
else return confirm(target,low,mid);
}
int halfind(int target,int low,int high)
{
int mid=(low+high)/2;
if(low>high)return -1;
else if(a[mid]<target){
low=mid+1;
return halfind(target,low,high);
}
else if(a[mid]>target){
high=mid-1;
return halfind(target,low,high);
}
else {
if(a[mid]==a[mid-1])return confirm(target,low,mid-1);
else return mid;
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)
{
cin>>item;
cout<<halfind(item,1,n)<<" ";
}
return 0;
}
代码如上