#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
template <class T>
using orderStaticTree =
tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define ll long long
#define saleh \
ios_base::sync_with_stdio(false); \
cin.tie(nullptr);
const int N = 3e5 + 100;
int bit[N];
int get(int ind)
{
int ret = 0;
for (; ind; ind -= (ind & (-ind)))
{
ret += bit[ind];
}
return ret;
}
void ad(int ind, int val)
{
for (; ind < N; ind += (ind & (-ind)))
bit[ind] += val;
}
int main()
{
saleh;
int n, q;
cin >> n >> q;
vector<int> f(q);
int last = 0;
for (int i = 0; i < q; i++)
{
int a, b;
cin >> a >> b;
if (a == 1)
{
ad(b, 1);
f[i] = b;
}
else if (a == 2)
{
ad(b, -1 * (get(b) - get(b - 1)));
}
else
{
while (b > last)
{
ad(f[last], -1);
last++;
}
}
cout << get(N - 1) << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4KdXNpbmcgb3JkZXJTdGF0aWNUcmVlID0KICAgIHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKCiNkZWZpbmUgbGwgbG9uZyBsb25nCgojZGVmaW5lIHNhbGVoICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBcCiAgICBjaW4udGllKG51bGxwdHIpOwpjb25zdCBpbnQgTiA9IDNlNSArIDEwMDsKaW50IGJpdFtOXTsKCmludCBnZXQoaW50IGluZCkKewogICAgaW50IHJldCA9IDA7CiAgICBmb3IgKDsgaW5kOyBpbmQgLT0gKGluZCAmICgtaW5kKSkpCiAgICB7CiAgICAgICAgcmV0ICs9IGJpdFtpbmRdOwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKdm9pZCBhZChpbnQgaW5kLCBpbnQgdmFsKQp7CiAgICBmb3IgKDsgaW5kIDwgTjsgaW5kICs9IChpbmQgJiAoLWluZCkpKQogICAgICAgIGJpdFtpbmRdICs9IHZhbDsKfQoKaW50IG1haW4oKQp7CiAgICBzYWxlaDsKICAgIGludCBuLCBxOwogICAgY2luID4+IG4gPj4gcTsKCiAgICB2ZWN0b3I8aW50PiBmKHEpOwogICAgaW50IGxhc3QgPSAwOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKQogICAgewogICAgICAgIGludCBhLCBiOwogICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICAgaWYgKGEgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGFkKGIsIDEpOwogICAgICAgICAgICBmW2ldID0gYjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoYSA9PSAyKQogICAgICAgIHsKICAgICAgICAgICAgYWQoYiwgLTEgKiAoZ2V0KGIpIC0gZ2V0KGIgLSAxKSkpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgICAgd2hpbGUgKGIgPiBsYXN0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhZChmW2xhc3RdLCAtMSk7CiAgICAgICAgICAgICAgICBsYXN0Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY291dCA8PCBnZXQoTiAtIDEpIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=