#include<stdio.h>
#define Ni 262144
#define max(a,b) ((a)>(b)?(a):(b))
int Max[Ni],Maxl[Ni],Maxr[Ni],Add[Ni];
void setintervals(int n, int l, int r)
{
Max[n]=Maxl[n]=Maxr[n]=r-l+1;
if(l<r)
{
int m=(l+r)>>1;
setintervals(n<<1,l,m);
setintervals(n<<1|1,m+1,r);
}
}
void update(int n, int l, int r, int a, int b, int k, int sa)
{
if(a<=l && r<=b)
{
Add[n]+=k;
if(k>0)
Max[n]=Maxl[n]=Maxr[n]=0;
else
Max[n]=Maxl[n]=Maxr[n]=r-l+1;
}
else
{
int m=(l+r)>>1;
if(a<=m)
update(n<<1,l,m,a,b,k,sa+Add[n<<1]);
if(b>m)
update(n<<1|1,m+1,r,a,b,k,sa+Add[n<<1|1]);
if(Max[n<<1]==0 || Max[n<<1]==m-l+1)
if(sa+Add[n<<1])
Max[n<<1]=Maxl[n<<1]=Maxr[n<<1]=0;
else
Max[n<<1]=Maxl[n<<1]=Maxr[n<<1]=m-l+1;
if(Max[n<<1|1]==0 || Max[n<<1|1]==r-m)
if(sa+Add[n<<1|1])
Max[n<<1|1]=Maxl[n<<1|1]=Maxr[n<<1|1]=0;
else
Max[n<<1|1]=Maxl[n<<1|1]=Maxr[n<<1|1]=r-m;
Max[n]=Maxr[n<<1]+Maxl[n<<1|1];
Max[n]=max(Max[n],Max[n<<1]);
Max[n]=max(Max[n],Max[n<<1|1]);
Maxl[n]=Maxl[n<<1];
if(Maxl[n]==m-l+1)
Maxl[n]+=Maxl[n<<1|1];
Maxr[n]=Maxr[n<<1|1];
if(Maxr[n]==r-m)
Maxr[n]+=Maxr[n<<1];
}
}
int main()
{
int n,m,t,i,j;
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d%d",&n,&m);
setintervals(1,1,n);
while(m--)
{
scanf("%d",&t);
if(t<3)
{
scanf("%d%d",&i,&j);
update(1,1,n,i,i+j-1,(t==1?1:-1),Add[1]);
}
else
printf("%d\n",Max[1]);
}
return 0;
}