#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
vector<int> op[MAXN], cl[MAXN];
int l[MAXN], r[MAXN];
int a[MAXN];
int val[MAXN];
int n, m;
int t[MAXN * 4];
int tsize;
int getAnd(int l, int r) {
  l += tsize;
  r += tsize;
  int res = (1 << 30) - 1;
  while (l <= r) {
    if (l & 1) res &= t[l++];
    if (!(r & 1)) res &= t[r--];
    l >>= 1;
    r >>= 1;
  }
  return res;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < (int)(m); i++) {
    scanf("%d %d %d", &l[i], &r[i], &val[i]);
    l[i]--, r[i]--;
    op[l[i]].push_back(i);
    cl[r[i]].push_back(i);
  }
  vector<int> cnt(30);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (int)(op[i].size()); j++) {
      for (int b = 0; b < (int)(30); b++) {
        if (val[op[i][j]] & (1 << b)) cnt[b]++;
      }
    }
    for (int b = 0; b < (int)(30); b++)
      if (cnt[b]) a[i] |= (1 << b);
    for (int j = 0; j < (int)(cl[i].size()); j++) {
      for (int b = 0; b < (int)(30); b++) {
        if (val[cl[i][j]] & (1 << b)) cnt[b]--;
      }
    }
  }
  tsize = 1;
  while (tsize < n) tsize *= 2;
  for (int i = 0; i < (int)(2 * tsize); i++) t[i] = (1 << 30) - 1;
  for (int i = 0; i < (int)(n); i++) t[tsize + i] = a[i];
  for (int i = tsize - 1; i > 0; i--) {
    t[i] = t[i * 2] & t[i * 2 + 1];
  }
  for (int i = 0; i < (int)(m); i++) {
    if (getAnd(l[i], r[i]) != val[i]) {
      puts("NO");
      return 0;
    }
  }
  puts("YES");
  for (int i = 0; i < (int)(n); i++) cout << a[i] << " ";
  return 0;
}
