#include <bits/stdc++.h>
using namespace std;
inline int read() {
  register int x(0);
  register char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = (x * 10) + (c ^ 48), c = getchar();
  return x;
}
int n, q, rt;
struct Segment {
  int tot;
  struct Tree {
    int val, tag, ls, rs;
  } t[15000005];
  inline void Push_up(int now) {
    t[now].val = t[(t[now].ls)].val + t[(t[now].rs)].val;
  }
  inline void Push_down(int now, int l, int r) {
    if (!(t[now].ls)) (t[now].ls) = ++tot;
    if (!(t[now].rs)) (t[now].rs) = ++tot;
    t[(t[now].ls)].val = (t[now].tag - 1) * (((l + r) >> 1) - l + 1),
    t[(t[now].ls)].tag = t[now].tag;
    t[(t[now].rs)].val = (t[now].tag - 1) * (r - ((l + r) >> 1)),
    t[(t[now].rs)].tag = t[now].tag;
    t[now].tag = 0;
  }
  void Upd(int& now, int l, int r, int x, int y, int state) {
    if (!now) now = ++tot;
    if (l >= x && r <= y)
      t[now].val = (state - 1) * (r - l + 1), t[now].tag = state;
    else {
      if (t[now].tag) Push_down(now, l, r);
      if (((l + r) >> 1) >= x) Upd((t[now].ls), l, ((l + r) >> 1), x, y, state);
      if (((l + r) >> 1) < y)
        Upd((t[now].rs), ((l + r) >> 1) + 1, r, x, y, state);
      Push_up(now);
    }
  }
  int Ask(int now, int l, int r, int x, int y) {
    if (!now) return 0;
    if (l >= x && r <= y) return t[now].val;
    if (t[now].tag) Push_down(now, l, r);
    int ans = 0;
    if (((l + r) >> 1) >= x) ans += Ask((t[now].ls), l, ((l + r) >> 1), x, y);
    if (((l + r) >> 1) < y)
      ans += Ask((t[now].rs), ((l + r) >> 1) + 1, r, x, y);
    return ans;
  }
} tree;
int main() {
  n = read(), q = read();
  while (q--) {
    int l = read(), r = read(), opt = read();
    if (opt == 1) {
      tree.Upd(rt, 1, n, l, r, 2);
      printf("%d\n", n - tree.t[rt].val);
    } else {
      tree.Upd(rt, 1, n, l, r, 1);
      printf("%d\n", n - tree.t[rt].val);
    }
  }
}
