#include <bits/stdc++.h>
using namespace std;
const int maxn = 15000000 + 9;
const int inf = 0x7f7f7f7f;
const int mod = 1e9 + 7;
int val[maxn], lson[maxn], rson[maxn], lazy[maxn];
int n, q;
int rt = 0, gen;
inline int read() {
  int a = 1, b = 0;
  char c = getchar();
  while (c > '9' || c < '0') {
    if (c == '-') a = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    b = (b << 3) + (b << 1) + c - '0';
    c = getchar();
  }
  return a * b;
}
inline void print(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) print(x / 10);
  putchar(x % 10 + '0');
}
inline void pushdown(int o, int l, int r) {
  if (lazy[o] != -1) {
    int mid = (l + r) >> 1;
    if (!lson[o]) lson[o] = ++rt;
    if (!rson[o]) rson[o] = ++rt;
    lazy[lson[o]] = lazy[o];
    lazy[rson[o]] = lazy[o];
    val[lson[o]] = lazy[o] * (mid - l + 1);
    val[rson[o]] = lazy[o] * (r - mid);
    lazy[o] = -1;
  }
}
inline void updata(int &o, int l, int r, int L, int R, int num) {
  if (!o) o = ++rt;
  if (l >= L && r <= R) {
    val[o] = num * (r - l + 1);
    lazy[o] = num;
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(o, l, r);
  if (mid >= L) updata(lson[o], l, mid, L, R, num);
  if (mid < R) updata(rson[o], mid + 1, r, L, R, num);
  val[o] = val[rson[o]] + val[lson[o]];
}
inline int query(int &o, int l, int r, int L, int R) {
  if (l >= L && r <= R) return val[o];
  int mid = (l + r) >> 1;
  pushdown(o, l, r);
  int ret = 0;
  if (mid >= L) ret += query(lson[o], l, mid, L, R);
  if (mid < R) ret += query(rson[o], mid + 1, r, L, R);
  return ret;
}
int main() {
  int A, B, C;
  memset(lazy, -1, sizeof(lazy));
  n = read(), q = read();
  gen = 1, rt = 1;
  while (q--) {
    A = read(), B = read(), C = read();
    if (C == 2) C = 0;
    updata(gen, 1, n, A, B, C);
    print(n - val[1]);
    puts("");
  }
  return 0;
}
