#include <cstdio>
#include <fstream>
#include <algorithm>
using namespace std;
#define N 456789
int n,m,a[N],b[N],c[N];
void pr (int k,int s,int d){
if(s==d){
a[k]=b[k]=c[k]=1;
return;}
int md=(s+d)>>1;
pr(k<<1,s,md);
pr((k<<1)+1,md+1,d);
a[k]=b[k]=c[k]=d-s+1;
}
void up (int k,int s,int d,int i,int j,int x){
if(s<=i&&d>=j){
a[k]=b[k]=c[k]=x*(j-i+1);
return;}
int md=(i+j)>>1;
if(a[k]==0){
a[k<<1]=b[k<<1]=c[k<<1]=0;
a[(k<<1)+1]=b[(k<<1)+1]=c[(k<<1)+1]=0;
}
if(a[k]==j-i+1){
a[k<<1]=b[k<<1]=c[k<<1]=md-i+1;
a[(k<<1)+1]=b[(k<<1)+1]=c[(k<<1)+1]=j-md;
}
if(s<=md)
up(k<<1,s,d,i,md,x);
if(d>md)
up((k<<1)+1,s,d,md+1,j,x);
b[k]=b[k<<1];
if(b[k<<1]==md-i+1)
b[k]+=b[(k<<1)+1];
c[k]=c[(k<<1)+1];
if(c[(k<<1)+1]==j-md)
c[k]+=c[k<<1];
a[k]=max(c[k<<1]+b[(k<<1)+1],max(a[k<<1],a[(k<<1)+1]));
}
int main ()
{
ifstream in ("hotel.in");
freopen ("hotel.out","w",stdout);
in>>n>>m;
pr(1,1,n);
for(int z,x,y;m;--m){
in>>z;
switch(z){
case 1:{in>>x>>y;
up(1,x,x+y-1,1,n,0);
break;}
case 2:{in>>x>>y;
up(1,x,x+y-1,1,n,1);
break;}
case 3:printf("%d\n",a[1]);
}
}
return 0;}