#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 2e5+10;
int a[maxn],b[maxn],sum[maxn<<1],lc[maxn<<1],rc[maxn<<1],an[maxn];
int cnt,root,n,m,len;
void Push_up(int rt) {
sum[rt] = sum[lc[rt]]+sum[rc[rt]];
}
void Modify(int &rt,int l,int r,int val) {
if(!rt) {
rt = ++cnt;
}
if(l==r) {
sum[rt] = 1;
return;
}
int mid = (l + r)>>1;
if(val <= mid) {
Modify(lc[rt],l,mid,val);
} else {
Modify(rc[rt],mid+1,r,val);
}
Push_up(rt);
}
int Ask(int rt,int l,int r,int k) {
if(!rt) {
return 0;
}
if(l == r) {
return l;
}
int mid = (l+r)>>1;
if(k <= sum[lc[rt]]) {
return Ask(lc[rt],l,mid,k);
} else {
return Ask(rc[rt],mid+1,r,k-sum[lc[rt]]);
}
}
void Disc() {
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; ++i) {
scanf("%d",&a[i]);
b[i] = a[i];
}
for(int i = 1; i <= m; ++i) {
scanf("%d",&an[i]);
}
sort(b+1,b+n+1);
len = unique(b+1,b+n+1)-(b+1);
}
int get(int val) {
return lower_bound(b+1,b+len+1,val) - b;
}
int main() {
Disc();
int op = 1;
for(int i = 1; i <= n; ++i) {
Modify(root,1,len,get(a[i]));
while(an[op] == i && op <=m) {
printf("%d\n",b[Ask(1,1,len,op)]);
op++;
}
}
return 0;
}