#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
struct tree {
  int l, r;
  mutable int v;
  tree(int _l, int _r = -1, int _v = 0) : l(_l), r(_r), v(_v) {}
  bool operator<(const tree& b) const { return l < b.l; }
};
set<tree> s;
int n, m, sum;
set<tree>::iterator split(int pos) {
  set<tree>::iterator it = s.lower_bound(tree(pos));
  if (it != s.end() && it->l == pos) return it;
  --it;
  int l = it->l, r = it->r, v = it->v;
  s.erase(it);
  s.insert(tree(l, pos - 1, v ? pos - l : 0));
  return s.insert(tree(pos, r, v ? r - pos + 1 : 0)).first;
}
void assign(int l, int r, int val = 0) {
  set<tree>::iterator itr = split(r + 1), itl = split(l);
  for (set<tree>::iterator it = itl; it != itr; ++it) sum -= it->v;
  s.erase(itl, itr);
  s.insert(tree(l, r, val * (r - l + 1)));
  sum += val * (r - l + 1);
}
void solve() {
  n = read(), m = read();
  sum = n;
  s.insert(tree(1, n, 1));
  for (int i = 1; i <= m; i += 1) {
    int l = read(), r = read(), k = read() - 1;
    assign(l, r, k);
    printf("%d\n", sum);
  }
}
int main() { solve(); }
