#include<bits/stdc++.h>
using namespace std;
int tot;
#define inf 0x7fffffff
unsigned int seed=114514;
int root;
struct point{
int l;
int r,val,v,siz,cnt;
}a[1500005];
int cr(int val){
tot++;
a[tot].val=val;
a[tot].v=rand();
a[tot].siz=a[tot].cnt=1;
return tot;
}
void update(int p){
a[p].siz=a[a[p].l].siz+a[a[p].r].siz+a[p].cnt;
}
int rank(int rk,int p){
if(!p)return inf;
if(rk<=(a[a[p].l].siz))return rank(rk,a[p].l);
if(rk<=(a[a[p].l].siz)+a[p].cnt)return a[p].val;
return rank(rk-a[a[p].l].siz-a[p].cnt,a[p].r);
}
int grank(int x,int p){
if(!p)return 0;
if(x==a[p].val)return a[a[p].l].siz+1;
if(x<a[p].val){
return grank(x,a[p].l);
}
return grank(x,a[p].r)+a[p].cnt+a[a[p].l].siz;
}
void zig(int &p){
int q=a[p].l;
a[p].l=a[q].r;
a[q].r=p;
p=q;
update(a[p].r);
update(p);
}
void zag(int &p){
int q=a[p].r;
a[p].r=a[q].l;
a[q].l=p;
p=q;
update(a[p].l);
update(p);
}
void Insert(int val,int &p){
if(p==0){
p=cr(val);
return;
}
if(val==a[p].val){
a[p].cnt++;
update(p);
return;
}
if(val<a[p].val){
Insert(val,a[p].l);
if(a[p].v<a[a[p].l].v)zig(p);
}
if(val>a[p].val){
Insert(val,a[p].r);
if(a[p].v<a[a[p].r].v)zag(p);
}
update(p);
}
void del(int &p,int x){
if(!p)return;
if(x==a[p].val){
if(a[p].cnt>1){
a[p].cnt--;
update(p);
return;
}
if(a[p].l||a[p].r){
if(a[p].r==0||a[a[p].l].v>a[a[p].r].v){
zig(p);
del(a[p].r,x);
}
else{
zag(p);
del(a[p].l,x);
}
update(p);
}
else p=0;
return;
}
x<a[p].val?del(a[p].l,x):del(a[p].r,x);
update(p);
}
int getpre(int x){
int ans=1;
int p=root;
while(p){
if(x==a[p].val){
if(a[p].l>0){
p=a[p].l;
while(a[p].r>0)p=a[p].r;
ans=p;
}
break;
}
if(a[p].val<x&&a[p].val>a[ans].val)ans=p;
p=x<a[p].val?a[p].l:a[p].r;
}
return a[ans].val;
}
int getn(int x){
int ans=2;
int p=root;
while(p){
if(x==a[p].val){
if(a[p].r>0){
p=a[p].r;
while(a[p].l>0)p=a[p].l;
ans=p;
}
break;
}
if(a[p].val>x&&a[p].val<a[ans].val)ans=p;
p=x<a[p].val?a[p].l:a[p].r;
}
return a[ans].val;
}
int main(){
srand(seed);
cr(-inf);
cr(inf);
root=1;
a[1].r=2;
update(root);
int n,m,lastans=0,k;
scanf("%d",&n);
int res=0;
for(int i=1;i<=m;i++){
int op,x;
scanf("%d %d",&op,&x);
if(op==1){
Insert(x,root);
}
else if(op==2){
del(root,x);
}
else if(op==3){
cout<<grank(x,root)<<endl;
}
else if(op==4){
cout<<rank(x+1,root)<<endl;
}
else if(op==5){
cout<<getpre(x)<<endl;
}
else cout<<getn(x)<<endl;
}
}