#include <bits/stdc++.h>
static inline int gc() {
  static char buf[1 << 20], *p = buf, *end = buf;
  if (p == end) {
    if ((end = buf + fread(buf, 1, 1 << 20, stdin)) == buf) return EOF;
    p = buf;
  }
  return *p++;
}
template <typename T>
inline void gn(T& _) {
  T __ = 1;
  char c = gc();
  _ = 0;
  while ((c < '0' || c > '9') && c != '-') c = gc();
  if (c == '-') __ = -1, c = gc();
  while (c >= '0' && c <= '9') _ = _ * 10 + c - '0', c = gc();
  _ *= __;
}
template <typename T, typename... Args>
inline void gn(T& x, Args&... args) {
  gn(x);
  gn(args...);
}
class SegTree {
 private:
  static constexpr int MEM = 16650000;
  int n, mem_, root;
  struct node {
    int val, flag, lc, rc;
    node() : val(0), flag(-1), lc(0), rc(0){};
    node(int x) : val(x), flag(-1), lc(0), rc(0){};
  } nodes[MEM];
  inline int new_node(int x) {
    assert(mem_ < MEM);
    nodes[mem_] = node(x);
    return mem_++;
  }
  void push(int id, int l, int r) {
    if (nodes[id].flag == -1) return;
    if (nodes[id].flag == 1) {
      if (nodes[id].lc) nodes[nodes[id].lc].flag = 1;
      if (nodes[id].rc) nodes[nodes[id].rc].flag = 1;
      nodes[id].val = r - l;
      nodes[id].flag = -1;
      return;
    }
    int mid = (l + r) >> 1;
    if (!nodes[id].lc) nodes[id].lc = new_node(mid - l);
    if (!nodes[id].rc) nodes[id].rc = new_node(r - mid);
    nodes[id].val = 0;
    nodes[nodes[id].lc].flag = 0;
    nodes[nodes[id].rc].flag = 0;
    nodes[id].flag = -1;
  }
  void modify(int ql, int qr, int l, int r, int& id, int v) {
    if (qr <= l or r <= ql) return;
    if (!id) id = new_node(r - l);
    push(id, l, r);
    if (ql <= l and r <= qr) {
      nodes[id].flag = v;
      return;
    }
    int mid = (l + r) >> 1;
    modify(ql, qr, l, mid, nodes[id].lc, v);
    modify(ql, qr, mid, r, nodes[id].rc, v);
    nodes[id].val = 0;
    if (!nodes[id].lc)
      nodes[id].val += mid - l;
    else {
      if (nodes[nodes[id].lc].flag != -1)
        nodes[id].val += (mid - l) * nodes[nodes[id].lc].flag;
      else
        nodes[id].val += nodes[nodes[id].lc].val;
    }
    if (!nodes[id].rc)
      nodes[id].val += r - mid;
    else {
      if (nodes[nodes[id].rc].flag != -1)
        nodes[id].val += (r - mid) * nodes[nodes[id].rc].flag;
      else
        nodes[id].val += nodes[nodes[id].rc].val;
    }
  }

 public:
  void build(int n_) {
    n = n_, mem_ = 1;
    root = 0;
  }
  void modify(int l, int r, int v) { modify(l, r, 0, n, root, v); }
  int query() {
    push(root, 0, n);
    return nodes[root].val;
  }
} seg;
int main() {
  int n, q;
  gn(n, q);
  seg.build(n);
  while (q--) {
    int l, r, k;
    gn(l, r, k);
    seg.modify(l - 1, r, k - 1);
    printf("%d\n", seg.query());
  }
  return 0;
}
