#include <fstream>
#include <iostream>
#define NMAX 1700000
using namespace std;
ifstream fin ("hotel.in");
ofstream fout ("hotel.out");
struct nod
{
int nmax,pref,suf;
}a[NMAX];
void buildArb(int s,int d,int k)
{
if(s==d)
{
a[k].nmax=a[k].pref=a[k].suf=d-s+1;
return;
}
int m=(s+d)/2;
buildArb(s,m,2*k);
buildArb(m+1,d,2*k+1);
a[k].nmax=a[k].pref=a[k].suf=d-s+1;
}
void update(int x,int y,int val,int s,int d,int k)
{
if(s>y || d<x)
return;
if(s==d)
{
if(val==0)
a[k].nmax=a[k].pref=a[k].suf=d-s+1;
else
a[k].nmax=a[k].pref=a[k].suf=0;
return;
}
int m=(s+d)/2;
update(x,y,val,s,m,2*k);
update(x,y,val,m+1,d,2*k+1);
a[k].nmax=max(max(a[2*k].nmax,a[2*k+1].nmax),a[2*k].suf+a[2*k+1].pref);
a[k].pref=(a[2*k].nmax==m-s+1)? a[2*k].nmax+a[2*k+1].pref:a[2*k].pref;
a[k].suf=(a[2*k+1].nmax==d-m)? a[2*k+1].nmax+a[2*k].suf:a[2*k+1].suf;
}
void printArb()
{
for(int i=1;i<=20;++i)
cout<<i<<":["<<a[i].nmax<<','<<a[i].pref<<','<<a[i].suf<<"] ";
cout<<'\n';
}
int main()
{
int n,m;
fin>>n>>m;
buildArb(1,n,1);
while(m--)
{
int v;
fin>>v;
if(v==3)
fout<<a[1].nmax<<'\n';
else
{
int x,y;
fin>>x>>y;
if(v==1)
update(x,x+y-1,1,1,n,1);
else
update(x,x+y-1,0,1,n,1);
}
}
return 0;
}