#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 5;
int n, m;
int ans[maxn << 2];
ll a[maxn], b[maxn];
int d[maxn << 2];
struct shabe{
int p;
int k;
}s[maxn];
void update(int l, int r, int tr, int len){
if(l == r){
++d[tr];
return;
}
int mid = l + r >> 1;
if(len <= mid) update(l, mid, tr << 1, len);
else update(mid + 1, r, tr << 1 | 1, len);
d[tr] = d[tr << 1] + d[tr << 1 | 1];
}
int get(int l, int r, int tr, int k){
if(l == r)
return b[l];
int mid = l + r >> 1;
if(d[tr << 1] >= k) return get(l, mid, tr << 1, k);
else return get(mid + 1, r, tr << 1 | 1, k - d[tr << 1]);
}
void dict(){
for(int i = 1; i <= n; ++i){
scanf("%lld", &a[i]);
b[i] = a[i];
}
sort(b + 1, b + n + 1);
int len = unique(b + 1, b + n + 1) - b - 1;
for(int i = 1; i <= n; ++i)
a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
n = len;
}
bool cmp(shabe a, shabe b){
return a.p < b.p;
}
void sol(){
scanf("%d%d", &n, &m);
dict();
for(int i = 1; i <= m; ++i){
scanf("%d", &s[i].p);
s[i].k = i;
}
sort(s + 1, s + m + 1, cmp);
int j = 1;
for(int i = 1; i <= m; ++i){
for(; j <= s[i].p; ++j)
update(1, n, 1, a[j]);
ans[s[i].k] = get(1, n, 1, s[i].k);
}
for(int i = 1; i <= m; ++i)
printf("%d\n", ans[i]);
}
int main(){
sol();
return 0;
}