#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX_N 131072
int n, p, q, i, m, t, p2, tip;
struct arbore {
int nr;
int st;
int dr;
int Mx;
} Arb[4 * MAX_N];
void get_arb_nod(int nod, int st, int dr) {
//calculez Arb[nod].st si Arb[nod].dr
if (Arb[nod * 2].Mx == Arb[nod * 2].nr) Arb[nod].st = Arb[nod * 2].Mx + Arb[nod * 2 + 1].st;
else Arb[nod].st = Arb[nod * 2].st;
if (Arb[nod * 2 + 1].Mx == Arb[nod * 2 + 1].nr) Arb[nod].dr = Arb[nod * 2 + 1].Mx + Arb[nod * 2].dr;
else Arb[nod].dr = Arb[nod * 2 + 1].dr;
Arb[nod].Mx = Arb[nod * 2].dr + Arb[nod * 2 + 1].st;
Arb[nod].Mx = max(Arb[nod].Mx, Arb[nod * 2].Mx);
Arb[nod].Mx = max(Arb[nod].Mx, Arb[nod * 2 + 1].Mx);
Arb[nod].Mx = max(Arb[nod].Mx, Arb[nod].st);
Arb[nod].Mx = max(Arb[nod].Mx, Arb[nod].dr);
}
void arb_init(int nod, int st, int dr) {
if (st != dr) {
arb_init(nod * 2, st, (st + dr) / 2);
arb_init(nod * 2 + 1, (st + dr) / 2 + 1, dr);
Arb[nod].nr = Arb[nod * 2].nr + Arb[nod * 2 + 1].nr;
get_arb_nod(nod, st, dr);
}
else
if (dr <= n) Arb[nod].st = Arb[nod].dr = Arb[nod].Mx = Arb[nod].nr = 1;
}
void update(int nod, int st, int dr, int val) {
if (st > q || dr < p) return;
if (p <= st && dr <= q) {
if (val == 1) Arb[nod].Mx = Arb[nod].st = Arb[nod].dr = 0;
else Arb[nod].Mx = Arb[nod].st = Arb[nod].dr = Arb[nod].nr;
}
else {
if (Arb[nod].st == Arb[nod].dr && Arb[nod].dr == Arb[nod].Mx && (Arb[nod].st == 0 || Arb[nod].st == Arb[nod].nr)) {
if (Arb[nod].st == 0) {
Arb[nod * 2].st = Arb[nod * 2 + 1].st = 0;
Arb[nod * 2].dr = Arb[nod * 2 + 1].dr = 0;
Arb[nod * 2].Mx = Arb[nod * 2 + 1].Mx = 0;
}
else {
Arb[nod * 2].st = Arb[nod * 2 + 1].st = Arb[nod * 2 + 1].nr;
Arb[nod * 2].dr = Arb[nod * 2 + 1].dr = Arb[nod * 2 + 1].nr;
Arb[nod * 2].Mx = Arb[nod * 2 + 1].Mx = Arb[nod * 2 + 1].nr;
}
}
update(nod * 2, st, (st + dr) / 2, val);
update(nod * 2 + 1, (st + dr) / 2 + 1, dr, val);
get_arb_nod(nod, st, dr);
}
}
int main() {
freopen("hotel.in", "r", stdin);
freopen("hotel.out", "w", stdout);
scanf("%d %d", &n, &t);
p2 = 1;
while (p2 < n) p2 *= 2;
arb_init(1, 1, p2);
while (t--) {
scanf("%d", &tip);
if (tip < 3) {
scanf("%d %d", &i, &m);
p = i; q = i + m - 1;
if (tip == 1) update(1, 1, p2, 1);
else update(1, 1, p2, 0);
}
if (tip == 3) printf("%d\n", Arb[1].Mx);
}
return 0;
}