RT
//保持que1.size()==uu
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int N=1e6+10;
const int M=1e3+10;
priority_queue<long long> que1;
priority_queue<long long,vector<long long>,greater<long long> > que2;
//que1 que2
long long n,m;
long long a[N];
long long u[N];
void init(){
scanf("%lld%lld",&m,&n);
for(long long i=1;i<=m;i++){
scanf("%lld",&a[i]);
}
for(long long i=1;i<=n;i++){
scanf("%lld",&u[i]);
}
}
//
//
int main(){
init();
long long uu=1;
for(long long i=1;i<=m;i++){
que1.push(a[i]);
if(que1.size()>uu){
que2.push(que1.top());
que1.pop();
}
if(u[uu]==i){
while(u[uu]==i){
printf("%lld\n",que1.top());
uu++;
if(u[uu]==i){
if(que1.size()<uu){
que1.push(que2.top());
que2.pop();
}
}
}
}
}
return 0;
}