#include <cstdio>
struct ai_val {
int lung, st, end;
int deprop; // 0 - nu propag; 1 - propag 1; 2 - propag 0
};
const int N_Max = 100005;
int N;
ai_val ai[5 * N_Max];
void propaga(int nod, int pi, int pf) {
int mij = (pi + pf) / 2;
if (ai[nod].deprop == 1) {
ai[2 * nod].lung = 0;
ai[2 * nod].st = 0;
ai[2 * nod].end = 0;
ai[2 * nod].deprop = 1;
ai[2 * nod + 1].lung = 0;
ai[2 * nod + 1].st = 0;
ai[2 * nod + 1].end = 0;
ai[2 * nod + 1].deprop = 1;
} else {
ai[2 * nod].lung = mij - pi + 1;
ai[2 * nod].st = mij - pi + 1;
ai[2 * nod].end = mij - pi + 1;
ai[2 * nod].deprop = 2;
ai[2 * nod + 1].lung = pf - mij;
ai[2 * nod + 1].st = pf - mij;
ai[2 * nod + 1].end = pf - mij;
ai[2 * nod + 1].deprop = 2;
}
ai[nod].deprop = 0;
}
inline int max(int x, int y) {
return x < y ? y : x;
}
void dinam(int nod, int pi, int pf) {
int mij = (pi + pf) / 2;
ai[nod].lung = max(ai[2 * nod].end + ai[2 * nod + 1].st, max(ai[2 * nod].lung, ai[2 * nod + 1].lung));
ai[nod].st = ai[2 * nod].st;
if (ai[nod].st == mij - pi + 1)
ai[nod].st += ai[2 * nod + 1].st;
ai[nod].end = ai[2 * nod + 1].end;
if (ai[nod].end == pf - mij)
ai[nod].end += ai[2 * nod].end;
}
void insert(int nod, int pi, int pf, int sti, int endi) {
if (ai[nod].deprop)
propaga(nod, pi, pf);
if (pf < sti || pi > endi)
return;
if (sti <= pi && pf <= endi) {
ai[nod].lung = 0;
ai[nod].st = 0;
ai[nod].end = 0;
ai[nod].deprop = 1;
return;
}
int mij = (pi + pf) / 2;
insert(2 * nod, pi, mij, sti, endi);
insert(2 * nod + 1, mij + 1, pf, sti, endi);
dinam(nod, pi, pf);
}
void erase(int nod, int pi, int pf, int sti, int endi) {
if (ai[nod].deprop)
propaga(nod, pi, pf);
if (pf < sti || pi > endi)
return;
if (sti <= pi && pf <= endi) {
ai[nod].lung = pf - pi + 1;
ai[nod].st = pf - pi + 1;
ai[nod].end = pf - pi + 1;
ai[nod].deprop = 2;
return;
}
int mij = (pi + pf) / 2;
erase(2 * nod, pi, mij, sti, endi);
erase(2 * nod + 1, mij + 1, pf, sti, endi);
dinam(nod, pi, pf);
}
void solve() {
int M, pi, lung, type;
scanf("%d", &M);
for (int i = 1; i <= M; ++ i) {
scanf("%d", &type);
if (type == 1) {
scanf("%d%d", &pi, &lung);
insert(1, 1, N, pi, pi + lung - 1);
continue;
}
if (type == 2) {
scanf("%d%d", &pi, &lung);
erase(1, 1, N, pi, pi + lung - 1);
continue;
}
printf("%d\n", ai[1].lung);
}
}
void init(int nod, int pi, int pf) {
ai[nod].lung = pf - pi + 1;
ai[nod].st = pf - pi + 1;
ai[nod].end = pf - pi + 1;
ai[nod].deprop = 0;
if (pi == pf)
return;
int mij = (pi + pf) / 2;
init(2 * nod, pi, mij);
init(2 * nod + 1, mij + 1, pf);
}
int main() {
freopen("hotel.in", "r", stdin);
freopen("hotel.out", "w", stdout);
scanf("%d", &N);
init(1, 1, N);
solve();
return 0;
}