#include <bits/stdc++.h>
struct node {
  int l, r, val;
  node(int l, int r, int val = -1) {
    this->l = l;
    this->r = r;
    this->val = val;
  }
  bool operator<(const node &that) const { return l < that.l; }
};
std::set<node> s;
int n, T, ans;
inline int read() {
  register int x = 0, f = 1;
  register char s = getchar();
  while (s > '9' || s < '0') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + s - '0';
    s = getchar();
  }
  return x * f;
}
inline std::set<node>::iterator split(int x) {
  if (x > n) return s.end();
  std::set<node>::iterator it = (--s.upper_bound(node(x, x)));
  if (it->l == x) return it;
  int l = it->l, r = it->r, val = it->val;
  s.erase(it);
  s.insert(node(l, x - 1, val));
  return s.insert(node(x, r, val)).first;
}
int main() {
  n = read(), T = read(), ans = n;
  s.insert(node(1, n, 1));
  while (T--) {
    int l = read(), r = read(), k = read();
    if (k == 1) {
      std::set<node>::iterator itr = split(r + 1);
      std::set<node>::iterator itl = split(l), it = itl;
      for (; itl != itr; ++itl) {
        if (itl->val == 1) ans -= itl->r - itl->l + 1;
      }
      s.erase(it, itr);
      s.insert(node(l, r, 0));
      printf("%d\n", ans);
    } else {
      std::set<node>::iterator itr = split(r + 1), itl = split(l), it = itl;
      for (; itl != itr; ++itl) {
        if (itl->val == 0) ans += itl->r - itl->l + 1;
      }
      s.erase(it, itr);
      s.insert(node(l, r, 1));
      printf("%d\n", ans);
    }
  }
  return 0;
}
