#include<fstream>
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
int n,m,k,x,y;
struct betsy{
int x,y,val;
}a[300000];
void sfill(int x,int val){
a[x].x=a[x].y=a[x].val=val;
}
void update(int nod,int st,int dr,int x,int y,int op){
if(x<=st&&dr<=y)
if(op==1) sfill(nod,0);
else sfill(nod,dr-st+1);
else{
int mid=(st+dr)/2;
if(!a[nod].val) sfill(nod*2,0),sfill(nod*2+1,0);
if(a[nod].val==dr-st+1)
sfill(nod*2,mid-st+1),sfill(nod*2+1,dr-mid);
if(x<=mid) update(nod*2,st,mid,x,y,op);
if(mid<y) update(nod*2+1,mid+1,dr,x,y,op);
a[nod].val=max(a[nod*2].val,a[nod*2+1].val);
a[nod].val=max(a[nod].val,a[nod*2].y+a[nod*2+1].x);
a[nod].x=a[nod*2].x;
a[nod].y=a[nod*2+1].y;
if(a[2*nod].x==mid-st+1) a[nod].x+=a[nod*2+1].x;
if(a[2*nod+1].y==dr-mid) a[nod].y+=a[nod*2].y;
}
}
int main(){
f>>n>>k;
update(1,1,n,1,n,2);
while(k--){
f>>x;
if(x==3) g<<a[1].val<<"\n";
else if(x==2) f>>x>>y,y+=x-1,update(1,1,n,x,y,2);
else f>>x>>y,y+=x-1,update(1,1,n,x,y,1);
}
return 0;
}