#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 200010;
ll sid,Q;
struct Node{
ll hd,lt;
};
Node q[N];
ll head = 1,tail = 1;
priority_queue<ll> xa;
priority_queue<ll> xk;
void done(){
while(!xa.empty()&&!xk.empty()&&xa.top()==xk.top()) xa.pop(),xk.pop();
}
int main(){
scanf("%lld%lld",&sid,&Q);
while(Q--){
ll opt,x;
scanf("%lld",&opt);
if(opt==1){cin >> x;q[tail++] = (Node){1,x};xa.push(x);}
else if(opt==2){
cin >> x;
while(x){
if(x>=q[head].lt-q[head].hd+1){
x-=(q[head].lt-q[head].hd+1);
xk.push(q[head].lt);
head++;
} else {
q[head].hd+=x;
x = 0;
}
}
} else if(opt==3){
cin >> x;
for(ll i = head; i < tail; i++){
if(q[i].lt-q[i].hd+1<x) x-=(q[i].lt-q[i].hd+1);
else {
printf("%lld\n",q[i].hd+x-1);
break;
}
}
} else {
done();
printf("%lld\n",xa.top());
}
}
return 0;
}
TLE5个