#include <bits/stdc++.h>
using namespace std;
struct el
{
int s,d,l,m;
};
el v[200055]; /// s=st d=dr l=lazy m=max
void lz(int l,int r,int in)
{
if(v[in].l!=0)
{
if(v[in].l==1)
{
v[in].s=(r-l+1);
v[in].d=(r-l+1);
v[in].m=(r-l+1);
}
else
{
v[in].s=0;
v[in].d=0;
v[in].m=0;
}
if(l!=r)
{
v[in*2].l=v[in].l;
v[in*2+1].l=v[in].l;
}
v[in].l=0;
}
}
void up(int l,int r,int a,int b,int in,int val)
{
lz(l,r,in);
if(r<a || b<l)
{
}
else if(a<=l && r<=b)
{
v[in].l=val;
lz(l,r,in);
}
else
{
int mij=(l+r)/2;
up(l,mij,a,b,in*2,val);
up(mij+1,r,a,b,in*2+1,val);
lz(l,mij,in*2);
lz(mij+1,r,in*2+1);
v[in].m=max(v[in*2].m,v[in*2+1].m);
v[in].m=max(v[in].m,v[in*2].d+v[in*2+1].s);
v[in].s=v[in*2].s;
v[in].d=v[in*2+1].d;
if(v[in*2+1].m==(r-mij))
{
v[in].d=max(v[in].d,v[in*2+1].m+v[in*2].d);
}
if(v[in*2].m==(mij-l+1))
{
v[in].s=max(v[in].s,v[in*2].m+v[in*2+1].s);
}
v[in].m=max(v[in].m,v[in].d);
v[in].m=max(v[in].m,v[in].s);
}
}
int main()
{
ifstream cin("hotel.in");
ofstream cout("hotel.out");
int n,m,caz,x,y;
cin>>n>>m;
up(1,n,1,n,1,1);
for(int i=1;i<=m;++i)
{
cin>>caz;
if(caz==1)
{
cin>>x>>y;
up(1,n,x,(x+y-1),1,-1);
}
else if(caz==2)
{
cin>>x>>y;
up(1,n,x,(x+y-1),1,1);
}
else
{
cout<<v[1].m<<"\n";
}
}
return 0;
}