#include <bits/stdc++.h>
using namespace std;
int a[100005];
int sum[100005];
int l[100005];
int r[100005];
int q[100005];
typedef struct node {
  int d;
  node() {}
  void init(int v) { d = v; }
  void merge(const node& l, const node& r) { d = l.d & r.d; }
} node;
node st[4 * 100005];
void buildSt(int i, int l, int r) {
  if (l == r)
    st[i].init(a[l]);
  else {
    int m = ((l + r) >> 1);
    buildSt((i << 1), l, m);
    buildSt(((i << 1) + 1), m + 1, r);
    st[i].merge(st[(i << 1)], st[((i << 1) + 1)]);
  }
}
node rangeQuery(int i, int s, int e, int l, int r) {
  if (l == s && e == r) return st[i];
  int m = ((s + e) >> 1);
  if (r <= m) return rangeQuery((i << 1), s, m, l, r);
  if (l > m) return rangeQuery(((i << 1) + 1), m + 1, e, l, r);
  node a;
  a.merge(rangeQuery((i << 1), s, m, l, min(m, r)),
          rangeQuery(((i << 1) + 1), m + 1, e, max(l, m + 1), r));
  return a;
}
int main() {
  std::ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < (m); i++) {
    cin >> l[i] >> r[i] >> q[i];
    l[i]--;
    r[i]--;
  }
  for (int bit = 0; bit < (31); bit++) {
    memset(sum, 0, sizeof sum);
    ;
    for (int i = 0; i < (m); i++) {
      if ((q[i] >> bit) & 1) {
        sum[l[i]]++;
        sum[r[i] + 1]--;
      }
    }
    if (sum[0] > 0) a[0] |= (1 << bit);
    for (int i = (1); i <= (n - 1); i++) {
      sum[i] += sum[i - 1];
      if (sum[i] > 0) a[i] |= (1 << bit);
    }
  }
  buildSt(1, 0, n - 1);
  for (int i = 0; i < (m); i++) {
    if (rangeQuery(1, 0, n - 1, l[i], r[i]).d != q[i]) {
      cout << "NO\n";
      return 0;
    }
  }
  cout << "YES\n";
  for (int i = 0; i < (n); i++) cout << a[i] << " ";
  cout << endl;
  return 0;
}
