#include <bits/stdc++.h>
using namespace std;
struct node {
  int st, dr, val;
  node(int ST, int DR, int VAL) : st(ST), dr(DR), val(VAL) {}
  bool operator<(const node &x) const { return st < x.st; }
};
int n, q;
int rez;
set<node> S;
set<node>::iterator split(int poz) {
  if (poz == n + 1) return S.end();
  set<node>::iterator it;
  it = S.lower_bound(node(poz, poz, 1));
  if (it != S.end() && it->st == poz) {
    return it;
  }
  it--;
  int l = it->st;
  int r = it->dr;
  int v = it->val;
  S.erase(it);
  S.insert(node(l, poz - 1, v ? poz - l : 0));
  return S.insert(node(poz, r, v ? r - poz + 1 : 0)).first;
}
void creare(int l, int r, int v) {
  set<node>::iterator its, itd;
  itd = split(r + 1);
  its = split(l);
  for (set<node>::iterator it = its; it != itd; it++) {
    rez -= it->val;
  }
  S.erase(its, itd);
  S.insert(node(l, r, v * (r - l + 1)));
  rez += v * (r - l + 1);
}
int main() {
  cin.tie(NULL);
  ios::sync_with_stdio(false);
  cin >> n >> q;
  rez = n;
  S.insert(node(1, n, n));
  for (int i = 1; i <= q; i++) {
    int r, l, v;
    cin >> r >> l >> v;
    creare(r, l, v - 1);
    cout << rez << '\n';
  }
  return 0;
}
