#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
int n, m, len;
int sum[N << 1];
int Hash[N << 1];
struct Query {
  int l, r, type;
} q[N];
struct Tree {
  int l, r, lazy, sum;
} tree[N << 3];
inline void push_up(int i) {
  tree[i].sum = tree[i << 1].sum + tree[i << 1 | 1].sum;
}
inline void setVal(int i, int val) {
  if (val == 1) {
    tree[i].sum = 0;
  } else if (val == 2) {
    tree[i].sum = sum[tree[i].r];
    if (tree[i].l != 0) {
      tree[i].sum -= sum[tree[i].l - 1];
    }
  }
  tree[i].lazy = val;
}
inline void push_down(int i) {
  if (tree[i].lazy == 0) {
    return;
  }
  if (tree[i].l == tree[i].r) {
    tree[i].lazy = 0;
    return;
  }
  setVal(i << 1, tree[i].lazy);
  setVal(i << 1 | 1, tree[i].lazy);
  tree[i].lazy = 0;
}
void build(int i, int l, int r) {
  tree[i].l = l;
  tree[i].r = r;
  tree[i].lazy = 0;
  if (l == r) {
    tree[i].sum = sum[l];
    if (l != 0) {
      tree[i].sum -= sum[l - 1];
    }
    return;
  }
  int mid = (l + r) >> 1;
  build(i << 1, l, mid);
  build(i << 1 | 1, mid + 1, r);
  push_up(i);
}
void update(int i, int l, int r, int val) {
  if (tree[i].l == l && tree[i].r == r) {
    setVal(i, val);
    return;
  }
  push_down(i);
  int mid = (tree[i].l + tree[i].r) >> 1;
  if (r <= mid) {
    update(i << 1, l, r, val);
  } else if (l > mid) {
    update(i << 1 | 1, l, r, val);
  } else {
    update(i << 1, l, mid, val);
    update(i << 1 | 1, mid + 1, r, val);
  }
  push_up(i);
}
int main(int argc, char const *argv[]) {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &q[i].l, &q[i].r, &q[i].type);
    Hash[len] = q[i].l;
    len++;
    Hash[len] = q[i].r + 1;
    len++;
  }
  Hash[len] = 1;
  len++;
  Hash[len] = n + 1;
  len++;
  sort(Hash, Hash + len);
  len = unique(Hash, Hash + len) - Hash;
  for (int i = 0; i < len - 1; i++) {
    if (i != 0) {
      sum[i] = Hash[i + 1] - Hash[i] + sum[i - 1];
    } else {
      sum[i] = Hash[i + 1] - Hash[i];
    }
  }
  build(1, 0, len - 2);
  for (int i = 1; i <= m; i++) {
    int x = lower_bound(Hash, Hash + len, q[i].l) - Hash;
    int y = lower_bound(Hash, Hash + len, q[i].r + 1) - Hash;
    y--;
    update(1, x, y, q[i].type);
    printf("%d\n", tree[1].sum);
  }
  return 0;
}
