#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
struct node {
  int l, r;
  mutable int w;
  bool operator<(const node& a) const { return l < a.l; }
};
set<node> S;
int n, q, sum;
set<node>::iterator split(int pos) {
  set<node>::iterator it = S.lower_bound((node){pos, 0, 0});
  if (it != S.end() && (*it).l == pos) return it;
  --it;
  int l = (*it).l, r = (*it).r, w = (*it).w;
  S.erase(it);
  S.insert((node){l, pos - 1, w});
  return S.insert((node){pos, r, w}).first;
}
void change(int l, int r, int v) {
  set<node>::iterator ir = split(r + 1), il = split(l), it = il;
  while (il != ir) {
    if ((*il).w) sum -= (*il).r - (*il).l + 1;
    ++il;
  }
  S.erase(it, ir);
  S.insert((node){l, r, v});
  if (v) sum += r - l + 1;
}
int main() {
  scanf("%d%d", &n, &q);
  S.insert((node){1, n, 1});
  sum = n;
  int flag, l, r;
  for (int i = 1; i <= q; ++i) {
    scanf("%d%d%d", &l, &r, &flag);
    change(l, r, flag == 1 ? 0 : 1);
    printf("%d\n", sum);
  }
  return 0;
}
