#include <bits/stdc++.h>
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
const int N=1<<19;
int aint[N],lazy[N],sum=0,smax;
void cerinta1(int p,int st,int dr,int a,int b)
{
if(a<=st && dr<=b)
{
aint[p]=dr-st+1;
lazy[p]=1;
}
else
{
int mij=(st+dr)/2,fs=p*2,fd=p*2+1;
if(lazy[p]!=0)
{
if(lazy[p]==1)
{
lazy[p]=0;
lazy[fd]=1;
lazy[fs]=1;
aint[fs]=mij-st+1;
aint[fd]=dr-mij;
}
else
{
lazy[p]=0;
aint[fd]=0;
aint[fs]=0;
lazy[fs]=-1;
lazy[fd]=-1;
}
}
if(a<=mij)cerinta1(fs,st,mij,a,b);
if(b>mij)cerinta1(fd,mij+1,dr,a,b);
aint[p]=aint[fd]+aint[fs];
}
}
void cerinta2(int p,int st,int dr,int a,int b)
{
if(a<=st && dr<=b)
{
aint[p]=0;
lazy[p]=-1;
}
else
{
int mij=(st+dr)/2,fs=p*2,fd=p*2+1;
if(lazy[p]!=0)
{
if(lazy[p]==1)
{
lazy[p]=0;
lazy[fd]=1;
lazy[fs]=1;
aint[fs]=mij-st+1;
aint[fd]=dr-mij;
}
else
{
lazy[p]=0;
aint[fd]=0;
aint[fs]=0;
lazy[fs]=-1;
lazy[fd]=-1;
}
}
if(a<=mij)cerinta2(fs,st,mij,a,b);
if(b>mij)cerinta2(fd,mij+1,dr,a,b);
aint[p]=aint[fd]+aint[fs];
}
}
void cerinta3(int p,int st,int dr)
{
if(aint[p]==0)
{
sum=sum+dr-st+1;
}
else if(aint[p]==dr-st+1)
{
if(smax<sum)smax=sum;
sum=0;
}
else
{
int mij=(st+dr)/2,fs=2*p,fd=2*p+1;
if(lazy[p]!=0)
{
if(lazy[p]==1)
{
lazy[p]=0;
lazy[fd]=1;
lazy[fs]=1;
aint[fs]=mij-st+1;
aint[fd]=dr-mij;
}
else
{
lazy[p]=0;
aint[fd]=0;
aint[fs]=0;
lazy[fs]=-1;
lazy[fd]=-1;
}
}
cerinta3(fs,st,mij);
cerinta3(fd,mij+1,dr);
}
}
int main()
{
int n,q;
fin>>n;
fin>>q;
for(int i=1; i<=q; i++)
{
int tip,a,x,b;
fin>>tip;
if(tip==1)
{
fin>>a>>x;
b=a+x-1;
cerinta1(1,1,n,a,b);
}
else if(tip==2)
{
fin>>a>>x;
b=a+x-1;
cerinta2(1,1,n,a,b);
}
else
{
sum=0,smax=-1;
cerinta3(1,1,n);
if(smax<sum)smax=sum;
fout<<smax<<'\n';
}
}
}