description: Moamen was drawing a grid of n rows and 10^9 columns containing only digits 0 and 1. Ezzat noticed what Moamen was drawing and became interested in the minimum number of rows one needs to remove to make the grid beautiful.
  
  A grid is beautiful if and only if for every two consecutive rows there is at least one column containing 1 in these two rows.
  
  Ezzat will give you the number of rows n, and m segments of the grid that contain digits 1. Every segment is represented with three integers i, l, and r, where i represents the row number, and l and r represent the first and the last column of the segment in that row.
  
  For example, if n = 3, m = 6, and the segments are (1,1,1), (1,7,8), (2,7,7), (2,15,15), (3,1,1), (3,15,15), then the grid is:
  
  <image>
  
  Your task is to tell Ezzat the minimum number of rows that should be removed to make the grid beautiful.
  
  Input
  
  The first line contains two integers n and m (1 ≤ n, m ≤ 3⋅10^5).
  
  Each of the next m lines contains three integers i, l, and r (1 ≤ i ≤ n, 1 ≤ l ≤ r ≤ 10^9). Each of these m lines means that row number i contains digits 1 in columns from l to r, inclusive.
  
  Note that the segments may overlap.
  
  Output
  
  In the first line, print a single integer k — the minimum number of rows that should be removed.
  
  In the second line print k distinct integers r_1, r_2, …, r_k, representing the rows that should be removed (1 ≤ r_i ≤ n), in any order.
  
  If there are multiple answers, print any.
  
  Examples
  
  Input
  
  
  3 6
  1 1 1
  1 7 8
  2 7 7
  2 15 15
  3 1 1
  3 15 15
  
  
  Output
  
  
  0
  
  
  Input
  
  
  5 4
  1 2 3
  2 4 6
  3 3 5
  5 1 1
  
  
  Output
  
  
  3
  2 4 5
  
  Note
  
  In the first test case, the grid is the one explained in the problem statement. The grid has the following properties: 
  
    1. The 1-st row and the 2-nd row have a common 1 in the column 7. 
    2. The 2-nd row and the 3-rd row have a common 1 in the column 15. 
  
  As a result, this grid is beautiful and we do not need to remove any row.
  
  In the second test case, the given grid is as follows: 
  
  <image>
solution: #include <bits/stdc++.h>
  using namespace std;
  void debug_out() { cerr << endl; }
  template <typename Head, typename... Tail>
  void debug_out(Head H, Tail... T) {
    cerr << ' ' << H;
    debug_out(T...);
  }
  const int N = 1e6 + 5;
  vector<pair<int, int>> v[N];
  int vis[N], las[N], dp[N], b[N], tot;
  pair<int, int> tag[N * 4], val[N * 4];
  void update(int l, int r, int rt, int a, int b, pair<int, int> p) {
    if (l >= a && r <= b) {
      if (tag[rt] < p) tag[rt] = p;
      val[rt] = max(val[rt], p);
      return;
    }
    int m = l + r >> 1;
    if (a <= m) update(l, m, rt << 1, a, b, p);
    if (b > m) update(m + 1, r, rt << 1 | 1, a, b, p);
    val[rt] = max(val[rt << 1], val[rt << 1 | 1]);
  }
  pair<int, int> query(int l, int r, int rt, int a, int b) {
    if (l >= a && r <= b) return val[rt];
    int m = l + r >> 1;
    pair<int, int> ans = tag[rt];
    if (a <= m) ans = max(ans, query(l, m, rt << 1, a, b));
    if (b > m) ans = max(ans, query(m + 1, r, rt << 1 | 1, a, b));
    return ans;
  }
  int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int n, m;
    cin >> n >> m;
    for (int i = 1, j, l, r; i <= m; i++) {
      cin >> j >> l >> r;
      v[j].emplace_back(l, r);
      b[++tot] = l, b[++tot] = r;
    }
    sort(b + 1, b + tot + 1);
    tot = unique(b + 1, b + tot + 1) - b - 1;
    int mx = 0, p = 0;
    for (int i = 1; i <= n; i++) {
      pair<int, int> tmp = {0, 0};
      for (auto& e : v[i]) {
        int l = lower_bound(b + 1, b + tot + 1, e.first) - b;
        int r = lower_bound(b + 1, b + tot + 1, e.second) - b;
        auto pi = query(1, tot, 1, l, r);
        tmp = max(tmp, pi);
      }
      dp[i] = tmp.first + 1, las[i] = tmp.second;
      for (auto& e : v[i]) {
        int l = lower_bound(b + 1, b + tot + 1, e.first) - b;
        int r = lower_bound(b + 1, b + tot + 1, e.second) - b;
        update(1, tot, 1, l, r, {dp[i], i});
      }
      if (mx < dp[i]) {
        mx = dp[i];
        p = i;
      }
    }
    while (p) {
      vis[p] = 1;
      p = las[p];
    }
    vector<int> ans;
    for (int i = 1; i <= n; i++)
      if (!vis[i]) ans.push_back(i);
    cout << (int)ans.size() << '\n';
    for (int& x : ans) cout << x << ' ';
    return 0;
  }
  