#include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e5 + 10, STAN = (1 << 30) - 1;   struct QJ {     int l, r, q;   } q[MAXN];   int n, m;   struct Seg {     int water[MAXN * 4], sh[MAXN * 4];     bool fir[MAXN * 4];     Seg() {       memset(water, 0, sizeof(water));       memset(fir, 0, sizeof(fir));     }     int _st, _ed, _x, _t;     void _insert(int num, int l, int r) {       if (_st <= l && r <= _ed) {         water[num] |= _x;         return;       }       int mid = (l + r) >> 1;       if (_st <= mid) _insert(num << 1, l, mid);       if (_ed >= mid + 1) _insert(num << 1 | 1, mid + 1, r);     }     int _swim(int num, int l, int r, int now) {       int x;       now |= water[num];       if (l == r) {         if (!fir[num]) {           sh[num] = now;           fir[num] = true;         } else           sh[num] &= now;         return now;       }       int mid = (l + r) >> 1;       if (_t <= mid)         now = _swim(num << 1, l, mid, now);       else         now = _swim(num << 1 | 1, mid + 1, r, now);       if (!fir[num]) {         sh[num] = now;         fir[num] = true;       } else         sh[num] &= now;       return now;     }     int _check(int num, int l, int r) {       if (l == r) return sh[num];       if (_st <= l && r <= _ed) return sh[num];       int mid = (l + r) >> 1;       int ans = STAN;       if (_st <= mid) ans &= _check(num << 1, l, mid);       if (_ed >= mid + 1) ans &= _check(num << 1 | 1, mid + 1, r);       return ans;     }     inline void Insert(int l, int r, int q) {       _st = l, _ed = r, _x = q;       _insert(1, 1, n);     }     inline int Swim(int t) {       _t = t;       return _swim(1, 1, n, 0);     }     inline bool Check(int l, int r, int q) {       _st = l;       _ed = r;       return _check(1, 1, n) == q;     }   } T;   int a[MAXN];   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= m; i++) {       scanf( %d%d%d , &q[i].l, &q[i].r, &q[i].q);       T.Insert(q[i].l, q[i].r, q[i].q);     }     for (int i = 1; i <= n; i++) a[i] = T.Swim(i);     for (int i = 1; i <= m; i++)       if (!T.Check(q[i].l, q[i].r, q[i].q)) {         printf( NO n );         return 0;       }     printf( YES n );     for (int i = 1; i <= n; i++) printf( %d  , a[i]);     printf(  n );     return 0;   }   