#include <bits/stdc++.h>
using namespace std;
#define int long long
int maxn;
struct doubles{
int a,b;
};
vector<doubles> x;
void get(){
maxn=-INFINITY;
for(int j = 0; j < x.size(); ++j) {
if(x[j].b>maxn){
maxn=x[j].b;
}
}
}
signed main()
{
int c,q;
bool tmp=0;
cin>>c>>q;
for (int i = 0; i < q; ++i) {
int op,d;
cin>>op;
if(op!=4){
cin>>d;
}
if(op==1){
x.push_back({1,d});
tmp=0;
}
if(op==2){
while(d>=(x.front().b-x.front().a+1)){
d-=(x.front().b-x.front().a+1);
x.erase(x.begin());
if(!d){
break;
}
}
if(d){
x.front().a=x.front().a+d;
}
tmp=0;
}
if(op==3){
int s=0,p=0;
for(int j=0; s + x[j].b - x[j].a + 1 < d; j++){
s+=(x[j].b - x[j].a + 1);
p=j+1;
}
cout<< x[p].a + d-s-1<<"\n";
}
if(op==4){
if(!tmp){
get();
tmp=1;
}
cout<<maxn<<"\n";
}
}
return 0;
}