#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int c, q, op, x, idx = 1;
long long cnt, sta = 1;
struct num {
int len, start, end;
bool st;
} a[N];
void add(int n) {
a[idx].start = 1, a[idx].end = n, a[idx].len = n;
a[idx].st = true; //还在队列
idx++;
cnt += n;
}
void del(int n) {
for (int i = sta; i < idx; i++) {
if (a[i].len <= n ) {
a[i].st = false;
sta++;
n -= a[i].len;
} else {
a[i].start += n;
a[i].len -= n;
n -= n;
}
if (n <= 0)
break;
}
}
void findn(int n) {
for (int i = sta; i < idx; i++) {
if (a[i].len < n ) {
n -= a[i].len;
} else {
printf("%d\n", a[i].start + n - 1);
n -= n;
}
if (n <= 0)
break;
}
}
void maxx() {
long long maxn = 0;
for (int i = sta; i < idx; i++)
if (a[i].st && a[i].end > maxn)
maxn = a[i].end;
printf("%d\n", maxn);
}
int main() {
//freopen("queue5.in", "r", stdin);
scanf("%d%d", &c, &q);
while (q--) {
scanf("%d", &op);
if (op == 1) {
scanf("%d", &x);
add(x);
}
else if (op == 2) {
scanf("%d", &x);
del(x);
}
else if (op == 3) {
scanf("%d", &x);
findn(x);
} else
maxx();
}
return 0;
}