#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
int n, q;
bitset<N> tmp, ans, p[N];
struct tree {
  int l, r;
  vector<int> v;
} b[N * 8];
void buildtree(int t, int l, int r) {
  b[t].v.clear();
  b[t].l = l;
  b[t].r = r;
  if (l == r) return;
  int m = (l + r) >> 1;
  buildtree(t * 2, l, m);
  buildtree(t * 2 + 1, m + 1, r);
}
void update(int t, int l, int r, int x) {
  if (b[t].l >= l && b[t].r <= r) {
    b[t].v.push_back(x);
    return;
  }
  int m = (b[t].l + b[t].r) >> 1;
  if (l <= m) update(t * 2, l, r, x);
  if (r > m) update(t * 2 + 1, l, r, x);
}
void dfs(bitset<N> tmp, int t) {
  for (int i = 0; i < b[t].v.size(); i++) tmp |= (tmp << b[t].v[i]);
  if (b[t].l == b[t].r) {
    ans |= tmp;
    return;
  }
  dfs(tmp, t * 2);
  dfs(tmp, t * 2 + 1);
}
int main() {
  scanf("%d%d", &n, &q);
  buildtree(1, 1, n);
  for (int i = 1; i <= q; i++) {
    int l, r, x;
    scanf("%d%d%d", &l, &r, &x);
    update(1, l, r, x);
  }
  tmp.reset();
  ans.reset();
  tmp[0] = 1;
  dfs(tmp, 1);
  int cnt = 0;
  for (int i = 1; i <= n; i++)
    if (ans[i]) cnt++;
  printf("%d\n", cnt);
  for (int i = 1; i <= n; i++)
    if (ans[i]) printf("%d ", i);
  return 0;
}
