#include <iostream>
#include <fstream>
#define nmax 100008
using namespace std;
const char iname[] = "hotel.in";
const char oname[] = "hotel.out";
ifstream fin(iname);
ofstream fout(oname);
int Arb[nmax * 4], Lf[nmax * 4], Rg[nmax * 4];
int op, i, N, M, j, k, l, p, q;
void empty_hotel(int n, int left, int right, int lm, int rm)
{
if(left == lm && right == rm)
{
Arb[n] = Lf[n] = Rg[n] = rm - lm + 1;
return;
}
else
{
if(Arb[n] == 0)
{
Arb[2 * n] = 0, Arb[2 * n + 1] = 0;
Lf[2 * n] = 0; Rg[2 * n + 1] = 0;
Arb[n] = right - left + 1;
}
int middle = (left + right) >> 1;
if(lm <= middle)
empty_hotel(2 * n, left, middle, lm, min(middle, rm));
if(rm > middle)
empty_hotel(2 * n+ 1, middle + 1, right, max(middle + 1, lm), rm);
Lf[n] = Lf[2 * n];
if(Lf[2 * n] == middle - left + 1)
Lf[n] = Lf[2 * n] + Lf[2 * n + 1];
Rg[n] = Rg[2 * n + 1];
if(Rg[n] == right - (middle + 1) + 1)
Rg[n] = Rg[2 * n] + Rg[2 * n + 1];
Arb[n] = max(Arb[2 * n], max(Arb[2 * n + 1], Lf[2 * n + 1] + Rg[2 * n]));
Arb[n] = max(Arb[n], max(Lf[n], Rg[n]));
}
}
void fill_hotel(int n, int left, int right, int lm, int rm)
{
if(left == lm && right == rm)
{
Arb[n] = Lf[n] = Rg[n] = 0;
return;
}
else
{
int middle = (left + right) >> 1;
if(Arb[n] == right - left + 1)
{
Arb[2 * n] = middle - left + 1, Arb[2 * n + 1] = right - (middle + 1) + 1;
Lf[2 * n] = middle - left + 1; Rg[2 * n + 1] = right - (middle + 1) + 1;
Lf[2 * n + 1] = right - (middle + 1) + 1;
Rg[2 * n] = middle - left + 1;
Arb[n] = 0;
}
if(lm <= middle)
fill_hotel(2 * n, left, middle, lm, min(middle, rm));
if(rm > middle)
fill_hotel(2 * n + 1, middle + 1, right, max(middle + 1, lm), rm);
Lf[n] = Lf[2 * n];
if(Lf[2 * n] == middle - left + 1)
Lf[n] = Lf[2 * n] + Lf[2 * n + 1];
Rg[n] = Rg[2 * n + 1];
if(Rg[n] == right - (middle + 1) + 1)
Rg[n] = Rg[2 * n] + Rg[2 * n + 1];
Arb[n] = max(Arb[2 * n], max(Arb[2 * n + 1], Lf[2 * n + 1] + Rg[2 * n]));
Arb[n] = max(Arb[n], max(Lf[n], Rg[n]));
}
}
int main()
{
fin >> N >> M;
Arb[1] = N;
for(i = 1; i <= M; i ++)
{
fin >> op;
if(op == 1)
{
fin >> p >> q;
fill_hotel(1, 1, N, p, p + q - 1);
}
if(op == 2)
{
fin >> p >> q;
empty_hotel(1, 1, N, p, p + q - 1);
}
if(op == 3)
fout << Arb[1] << "\n";
}
return 0;
}