#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
inline bool sc(int &_x) { return scanf("%d", &_x) == 1; }
inline bool sc(int &_x, int &_y) { return sc(_x) && sc(_y); }
inline bool sc(int &_x, int &_y, int &_z) { return sc(_x) && sc(_y) && sc(_z); }
inline bool sc(int &_x, int &_y, int &_z, int &_zz) {
  return sc(_x) && sc(_y) && sc(_z) && sc(_zz);
}
queue<int> q[300002];
queue<pair<int, int> > notfc;
bool a[300002];
int main() {
  int n, m;
  sc(n, m);
  int unread = 0, i = 1;
  while (m--) {
    int z, x;
    sc(z, x);
    if (z == 1) {
      unread++;
      q[x].push(i);
      notfc.push(make_pair(i, x));
      i++;
    } else if (z == 2) {
      while (!q[x].empty()) {
        int s = q[x].front();
        q[x].pop();
        a[s] = 1;
        unread--;
      }
    } else {
      while (!notfc.empty() && notfc.front().first <= x) {
        int f = notfc.front().first;
        int g = notfc.front().second;
        notfc.pop();
        if (!a[f]) {
          a[f] = 1;
          q[g].pop();
          unread--;
        }
      }
    }
    printf("%d\n", unread);
  }
}
