#include <bits/stdc++.h>
const int maxn = 300010;
int ls[maxn * 50], rs[maxn * 50], tree[maxn * 50], lazy[maxn * 50], tot, n, q,
    l, r, k, mn, mx, ow;
template <typename T>
inline T read(T& x) {
  x = 0;
  int _f = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') _f |= (ch == '-'), ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x = _f ? -x : x;
}
inline void pushdown(int o, int l, int r) {
  if (lazy[o] == -1) return;
  if (!ls[o]) ls[o] = ++tot;
  if (!rs[o]) rs[o] = ++tot;
  int m = (l + r) >> 1;
  lazy[ls[o]] = lazy[rs[o]] = lazy[o];
  tree[ls[o]] = (m - l + 1) * lazy[o];
  tree[rs[o]] = (r - m) * lazy[o];
  lazy[o] = -1;
}
inline void add(int& now, int l, int r, int ql, int qr, int d) {
  if (!now) now = ++tot;
  if (l == ql && r == qr) {
    tree[now] = (r - l + 1) * d;
    lazy[now] = d;
    return;
  }
  pushdown(now, l, r);
  int m = (l + r) >> 1;
  if (qr <= m)
    add(ls[now], l, m, ql, qr, d);
  else if (ql > m) {
    add(rs[now], m + 1, r, ql, qr, d);
  } else {
    add(ls[now], l, m, ql, m, d);
    add(rs[now], m + 1, r, m + 1, qr, d);
  }
  tree[now] = tree[ls[now]] + tree[rs[now]];
}
int main() {
  memset(lazy, -1, sizeof(lazy));
  read(n);
  read(q);
  for (int i = 1; i <= q; i++) {
    read(l);
    read(r);
    read(k);
    if (k == 2) k = 0;
    add(ow, 1, n, l, r, k);
    printf("%d\n", n - tree[ow]);
  }
  return 0;
}
