#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, q, acum = 0, ultimo = 0, type, a, count;
  scanf("%d%d", &n, &q);
  vector<queue<int>> notificaciones_app(n);
  unordered_set<int> todas_notificaciones;
  while (q--) {
    scanf("%d%d", &type, &a);
    a--;
    switch (type) {
      case 1:
        acum++;
        todas_notificaciones.insert(acum);
        notificaciones_app[a].push(acum);
        break;
      case 2:
        while (!notificaciones_app[a].empty())
          todas_notificaciones.erase(notificaciones_app[a].front()),
              notificaciones_app[a].pop();
        break;
      case 3:
        a++;
        for (int i = ultimo; i <= a; i++) todas_notificaciones.erase(i);
        if (a > ultimo) ultimo = a;
        break;
    }
    printf("%d\n", todas_notificaciones.size());
  }
  return 0;
}
