#include<bits/stdc++.h>
using namespace std;
const int N=1e6+15;
int t[40*N];
int a[40*N];
int u[40*N];
int al[40*N];
int n,m;
int all[40*N];
int cnt=1;
int ans[40*N];
void push_up(int k)
{
t[k]=t[k*2]+t[k*2+1];
}
void update(int k,int l,int r,int point)
{
if(l==r)
{
t[k]++;
return ;
}
else
{
int mid=(l+r)>>1;
if(point<=mid)
{
update(2*k,l,mid,point);
}
else
{
update(2*k+1,mid+1,r,point);
}
push_up(k);
}
}
int query_rank(int k,int l,int r,int point)
{
if(l==r)
{
return l;
}
else
{
int mid=(l+r)>>1;
int ls=t[2*k];
int rs=t[2*k+1];
if(point<=ls)
{
return query_rank(k*2,l,mid,point);
}
else
{
return query_rank(k*2+1,mid+1,r,point-ls);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
al[i]=a[i];
}
for(int i=1;i<=m;i++)
{
cin>>u[i];
}
sort(al+1,al+1+n);
int sz=unique(al+1,al+1+n)-al;
for(int i=1;i<=n;i++)
{
all[i]=lower_bound(al+1,al+sz+1,a[i])-al;
update(1,1,n,all[i]);
while(i==u[cnt])
{
ans[cnt]=query_rank(1,1,n,cnt);
cnt++;
}
}
for(int i=1;i<cnt;i++)
{
cout<<al[ans[i]]<<endl;
}
return 0;
}