#include <cstdio>
int n,q,max[400002],l[400002],r[400002];
inline int mx(int a, int b) { return (a > b ? a : b); }
void init(int p,int a,int b)
{
max[p]=l[p]=r[p]=b-a+1;
if (b-a)
{
int mij=(a+b)/2;
init(p*2,a,mij);
init(p*2+1,mij+1,b);
}
}
void up(int p,int a,int b,int x,int y)
{
if ((a==x) && (b==y)) {l[p]=r[p]=max[p]=q*(x-y+1);return ;}
int mij=(a+b)/2;
if (max[p]==b-a+1)
max[p*2]=l[p*2]=r[p*2]=mij-a+1,max[p*2+1]=l[p*2+1]=r[p*2+1]=b-mij;
if (max[p]==0)
max[p*2]=l[p*2]=r[p*2]=max[p*2+1]=l[p*2+1]=r[p*2+1]=0;
if (x>mij) up(p*2+1,mij+1,b,x,y); else
if (y<=mij) up(p*2,a,mij,x,y); else
up(p*2,a,mij,x,mij),up(p*2+1,mij+1,b,mij+1,y);
l[p]=l[p*2];r[p]=r[p*2+1];
if (l[p]==mij-a+1) l[p]+=l[p*2+1];
if (r[p]==b-mij) r[p]+=r[p*2];
max[p]=mx(r[p*2]+l[p*2+1],mx(max[p*2],max[p*2+1]));
/*if (r[p*2]+l[p*2+1] >max[p])
max[p]=r[p*2]+l[p*2+1];
if (mx(max[p*2],max[p*2+1])>max[p])
max[p]=mx(max[p*2],max[p*2+1]);*/
}
int main()
{
int m,x,y,i;
freopen("hotel.in","r",stdin);
freopen("hotel.out","w",stdout);
scanf("%d %d",&n,&m);
//init(1,1,n);
max[1]=l[1]=r[1]=n;
while (m--)
{
scanf("%d",&x);
if (x==3) printf("%d\n",max[1]); else
if (x==1)
{
scanf("%d %d",&x,&y);q=0;y+=x-1;
up(1,1,n,x,y);
} else
{
scanf("%d %d",&x,&y);q=1;y+=x-1;
up(1,1,n,x,y);
}
}
return 0;
}