#include <fstream>
#include <cstdio>
#define NMAX 100001
using namespace std;
ofstream fout("hotel.out");
struct graf{int lastST, lastDR, bstSecv, lazzy; };
int bst, N4;
graf v[NMAX * 4];
void propagate(int st, int dr, int node)
{
if(v[node].lazzy == -1)
return;
if(v[node].lazzy == 0)
{
v[node].lastST = dr; v[node].lastDR = st;
v[node].bstSecv = dr - st + 1;
}
else
{
v[node].lastST = -1; v[node].lastDR = -1;
v[node].bstSecv = 0;
}
if(node * 2 <= N4) v[node * 2].lazzy = v[node].lazzy;
if(node * 2 + 1 <= N4) v[node * 2 + 1].lazzy = v[node].lazzy;
v[node].lazzy = -1;
}
void update(int inc, int sf, int val, int st, int dr, int node)
{
if(inc <= st && dr <= sf)
{
v[node].lazzy = val;
propagate(st, dr, node);
return;
}
int mij = (st + dr) / 2;
propagate(st, mij, node * 2);
propagate(mij + 1, dr, node * 2 + 1);
if(inc <= mij)
update(inc, sf, val, st, mij, node * 2);
if(mij < sf)
update(inc, sf, val, mij + 1, dr, node * 2 + 1);
v[node].bstSecv = 0;
if(v[node * 2].bstSecv > v[node].bstSecv) v[node].bstSecv = v[node * 2].bstSecv;
if(v[node * 2 + 1].bstSecv > v[node].bstSecv) v[node].bstSecv = v[node * 2 + 1].bstSecv;
if(v[node * 2].lastDR != -1 && v[node * 2 + 1].lastST != -1)
if(v[node * 2 + 1].lastST - v[node * 2].lastDR + 1 > v[node].bstSecv)
v[node].bstSecv = v[node * 2 + 1].lastST - v[node * 2].lastDR + 1;
if(v[node * 2].lastST == mij && v[node * 2 + 1].lastST != -1)
v[node].lastST = v[node * 2 + 1].lastST;
else
v[node].lastST = v[node * 2].lastST;
if(v[node * 2 + 1].lastDR == mij + 1 && v[node * 2].lastDR != -1)
v[node].lastDR = v[node * 2].lastDR;
else
v[node].lastDR = v[node * 2 + 1].lastDR;
return;
}
void firstBuild(int st, int dr, int node)
{
v[node].lastST = dr; v[node].lastDR = st;
v[node].lazzy = -1; v[node].bstSecv = dr - st + 1;
if(st != dr)
{
int mij = (st + dr) / 2;
if(st <= mij)
firstBuild(st, mij, node * 2);
if(dr > mij)
firstBuild(mij + 1, dr, node * 2 + 1);
}
}
int main()
{
int tasks, n, c, inc, lg;
freopen("hotel.in", "r", stdin);
scanf("%d%d", &n, &tasks);
N4 = n * 4;
firstBuild(1, n, 1);
for(int task = 1; task <= tasks; task++)
{
scanf("%d", &c);
if(c <= 2)
{
scanf("%d%d", &inc, &lg);
if(c == 1)
update(inc, inc + lg - 1, 1, 1, n, 1);
else
update(inc, inc + lg - 1, 0, 1, n, 1);
}
else
fout <<v[1].bstSecv <<'\n';
}
return 0;
}