#include <bits/stdc++.h>
using namespace std;
std::mt19937 rng(
    (int)std::chrono::steady_clock::now().time_since_epoch().count());
struct SetClear {
  struct cmp {
    bool operator()(pair<int, int> a, pair<int, int> b) {
      return a.second < b.second;
    }
  };
  set<pair<int, int>, cmp> st;
  int n;
  int ans;
  SetClear(int _n) {
    n = _n;
    ans = n;
  }
  void Set(int a, int b) {
    auto p = st.upper_bound({0, a - 1});
    if ((p == st.end()) or (p->first > b)) {
    } else {
      int x = p->first;
      int y = p->second;
      ans += (y - x + 1);
      p = st.erase(p);
      if (x <= (a - 1)) {
        ans -= (a - x);
        st.insert({x, a - 1});
      }
      if ((b + 1) <= y) {
        ans -= (y - b);
        st.insert({b + 1, y});
      }
      while ((p != st.end()) and (p->first <= b)) {
        x = p->first;
        y = p->second;
        ans += (y - x + 1);
        if (y > b) {
          ans -= (y - b);
          st.erase(p);
          st.insert({b + 1, y});
          break;
        } else {
          p = st.erase(p);
        }
      }
    }
  }
  void Clear(int a, int b) {
    auto p = st.upper_bound({0, a - 1});
    if ((p == st.end()) or (p->first > b)) {
      ans -= (b - a + 1);
      st.insert({a, b});
    } else {
      int x = p->first;
      int y = p->second;
      ans += (y - x + 1);
      p = st.erase(p);
      a = min(x, a);
      b = max(y, b);
      while ((p != st.end()) and (p->first <= b)) {
        x = p->first;
        y = p->second;
        ans += (y - x + 1);
        a = min(x, a);
        b = max(y, b);
        p = st.erase(p);
      }
      ans -= (b - a + 1);
      st.insert({a, b});
    }
  }
  int Count() { return ans; }
};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  SetClear sc(n);
  for (int i = 0; i < m; i++) {
    int a, b, op;
    cin >> a >> b >> op;
    if (op == 1) {
      sc.Clear(a, b);
    } else {
      sc.Set(a, b);
    }
    cout << sc.Count() << '\n';
  }
  return 0;
}
