#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1000000+1111;
int m,q,c,n;
int tot,root;
struct node{
int lc,rc,val;
int siz,pri;
}tr[maxn];
void pushup(int r)
{
tr[r].siz=tr[tr[r].lc].siz+tr[tr[r].rc].siz+1;
}
void split(int u,int x,int &L,int &R)
{
if(!u)
{
L=R=0;
return ;
}
if(tr[u].val<=x)
{
L=u;
split(tr[u].rc,x,tr[u].rc,R);
}
else{
R=u;
split(tr[u].lc,x,L,tr[u].lc);
}
pushup(u);
}
int merge(int L,int R)
{
if(!L||!R)return L+R;
if(tr[L].pri<tr[R].pri)
{
tr[L].rc=merge(tr[L].rc,R);
pushup(L);
return L;
}
tr[R].lc=merge(L,tr[R].lc);
pushup(R);
return R;
}
void newnode(int x)
{
tot++;
tr[tot].siz=1;tr[tot].val=x;tr[tot].pri=rand();
tr[tot].lc=tr[tot].rc=0;
}
void insert(int x)
{
int L=0,R=0;
newnode(x);
split(root,x,L,R);
root=merge(merge(L,tot),R);
}
int kth(int u,int k)
{
if(k==tr[tr[u].lc].siz+1) return u;
if(k<=tr[tr[u].lc].siz) return kth(tr[u].lc,k);
return kth(tr[u].rc,k-tr[tr[u].lc].siz-1);
}
signed main()
{
srand(time(NULL));
int temp;
scanf("%lld %lld",&m,&q);
for(int i=1;i<=m;i++)
{
scanf("%lld",&temp);
insert(temp);
}
for(int i=1;i<=q;i++)
{
scanf("%lld %lld",&c,&n);
if(c==1)
{
printf("%lld\n",kth(root,n));
}
if(c==2)
{
insert(n);
}
}
return 0;
}