#include <bits/stdc++.h>
using namespace std;
int u[600005];
struct node {
  int l, r, k;
} a[300005];
struct node1 {
  int num, k;
} b[600005];
struct node2 {
  int l, r, w, f;
} tree[2400005];
int tree1[2400005];
bool cmp(node1 a, node1 b) { return a.num < b.num; }
void build(int k, int l, int r) {
  tree[k].l = l;
  tree[k].r = r;
  if (l == r) {
    return;
  }
  int mid = (l + r) / 2;
  build(2 * k, l, mid);
  build(2 * k + 1, mid + 1, r);
}
void down(int k) {
  if (tree[k].f == 2) {
    tree1[2 * k] = 0;
    tree[2 * k].w = tree[2 * k + 1].w = 0;
    tree[2 * k].f = tree[2 * k + 1].f = 2;
  } else {
    tree1[2 * k] = u[tree[2 * k + 1].l] - u[tree[2 * k].r];
    tree[2 * k].w = u[tree[2 * k].r] - u[tree[2 * k].l];
    tree[2 * k + 1].w = u[tree[2 * k + 1].r] - u[tree[2 * k + 1].l];
    tree[2 * k].f = tree[2 * k + 1].f = 1;
  }
  tree[k].f = 0;
}
void change(int k, int l, int r, int v) {
  if ((v == 1 && tree[k].w == (u[tree[k].r] - u[tree[k].l])) ||
      (v == 2 && tree[k].w == 0))
    return;
  if (tree[k].l >= l && tree[k].r <= r) {
    if (v == 2)
      tree[k].w = 0;
    else
      tree[k].w = u[tree[k].r] - u[tree[k].l];
    tree[k].f = v;
    return;
  }
  if (tree[k].f) down(k);
  int mid = (tree[k].l + tree[k].r) / 2;
  if (l <= tree[2 * k].r && r >= tree[2 * k + 1].l) {
    if (v == 1)
      tree1[2 * k] = u[tree[2 * k + 1].l] - u[tree[2 * k].r];
    else
      tree1[2 * k] = 0;
  }
  if (mid >= l) change(2 * k, l, r, v);
  if (mid < r) change(2 * k + 1, l, r, v);
  tree[k].w = tree[2 * k].w + tree[2 * k + 1].w + tree1[2 * k];
}
int main() {
  int n, q;
  scanf("%d", &n);
  ;
  scanf("%d", &q);
  ;
  for (int i = 1; i <= q; ++i) {
    scanf("%d", &a[i].l);
    ;
    scanf("%d", &a[i].r);
    ;
    scanf("%d", &a[i].k);
    ;
    b[2 * (i - 1) + 1].num = a[i].l;
    b[2 * (i - 1) + 2].num = a[i].r + 1;
    b[2 * (i - 1) + 1].k = i;
    b[2 * (i - 1) + 2].k = -i;
  }
  sort(b + 1, b + 2 * q + 1, cmp);
  int end = 1;
  for (int i = 1; i <= 2 * q; ++i) {
    if (b[i].k > 0)
      a[b[i].k].l = end;
    else
      a[-b[i].k].r = end;
    u[end] = b[i].num;
    if (b[i].num != b[i + 1].num) end++;
  }
  build(1, 1, end - 1);
  for (int i = 1; i <= q; ++i) {
    change(1, a[i].l, a[i].r, a[i].k);
    printf("%d\n", n - tree[1].w);
  }
}
