#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  while (c <= '9' && c >= '0') x = x * 10 + c - '0', c = getchar();
  return x * f;
}
const int maxn = 500007 * 30;
int rt = 0;
struct Segtree {
  int tot;
  int ls[maxn], rs[maxn], tag[maxn], sum[maxn];
  void pushdown(int x, int l, int r) {
    int mid = l + r >> 1;
    if (l != r) {
      if (!ls[x]) ls[x] = ++tot;
      if (!rs[x]) rs[x] = ++tot;
      sum[ls[x]] = (mid - l + 1) * tag[x];
      sum[rs[x]] = (r - mid) * tag[x];
      tag[ls[x]] = tag[x];
      tag[rs[x]] = tag[x];
    }
    tag[x] = -1;
  }
  void modify(int &x, int l, int r, int L, int R, int w) {
    if (!x) x = ++tot;
    if (l >= L && r <= R) {
      sum[x] = (r - l + 1) * w;
      tag[x] = w;
      return;
    }
    if (tag[x] >= 0) pushdown(x, l, r);
    int mid = l + r >> 1;
    if (L <= mid) modify(ls[x], l, mid, L, R, w);
    if (R > mid) modify(rs[x], mid + 1, r, L, R, w);
    sum[x] = sum[ls[x]] + sum[rs[x]];
  }
} t;
int main() {
  int n = read();
  int m = read();
  memset(t.tag, -1, sizeof t.tag);
  for (int type, l, r, i = 1; i <= m; ++i) {
    l = read(), r = read(), type = read();
    if (type == 1)
      t.modify(rt, 1, n, l, r, 1);
    else
      t.modify(rt, 1, n, l, r, 0);
    printf("%d\n", n - t.sum[1]);
  }
  return 0;
}
