#include <bits/stdc++.h>
using namespace std;
const int N = 300005;
int n, Q, nn, ans, lim[N];
int t1[N * 4], t2[N * 4];
map<int, pair<int, vector<int> > > mp;
void init() {
  for (nn = 1; nn <= n + 1; nn <<= 1)
    ;
  for (int i = (int)(0); i <= (int)(2 * nn - 1); i++) t2[i] = 1e9, t1[i] = 0;
}
void Chg1(int x, int v) {
  x += nn;
  t1[x] = v;
  for (x >>= 1; x; x >>= 1) t1[x] = max(t1[x << 1], t1[x << 1 | 1]);
}
int Qmx1(int x, int y) {
  x += nn - 1;
  y += nn + 1;
  int ans = 0;
  for (; x ^ y ^ 1; x >>= 1, y >>= 1) {
    if (!(x & 1)) ans = max(ans, t1[x ^ 1]);
    if (y & 1) ans = max(ans, t1[y ^ 1]);
  }
  return ans;
}
void Chg2(int x, int y, int v) {
  x += nn - 1;
  y += nn + 1;
  for (; x ^ y ^ 1; x >>= 1, y >>= 1) {
    if (!(x & 1)) t2[x ^ 1] = min(t2[x ^ 1], v);
    if (y & 1) t2[y ^ 1] = min(t2[y ^ 1], v);
  }
}
int Qmx2(int x) {
  int ans = 1e9;
  for (x += nn; x; x >>= 1) ans = min(ans, t2[x]);
  return ans;
}
int main() {
  scanf("%d%d", &n, &Q);
  for (int i = (int)(1); i <= (int)(n); i++) lim[i] = -1;
  init();
  while (Q--) {
    int tp, x, y;
    scanf("%d%d%d", &tp, &x, &y);
    if (tp == 1) {
      int v, vv = Qmx1(x, y);
      scanf("%d", &v);
      if (vv > v) return puts("NO"), 0;
      if (vv < v) ans |= v, --mp[v].first;
      Chg2(x, y, v);
    } else {
      if (lim[x] == -1) lim[x] = Qmx2(x);
      Chg1(x, y);
    }
  }
  for (int i = (int)(1); i <= (int)(n); i++)
    if (lim[i] == -1) lim[i] = Qmx2(i);
  for (int i = (int)(1); i <= (int)(n); i++) {
    mp[lim[i]].first++;
    mp[lim[i]].second.push_back(i);
  }
  for (auto i : mp)
    if (i.second.first < 0) return puts("NO"), 0;
  for (auto i : mp)
    if (i.second.first > 1) {
      int v = i.first, vv = 1;
      for (; vv <= v; vv <<= 1)
        ;
      int x = i.second.second[0];
      int y = i.second.second[1];
      lim[x] = v;
      lim[y] = vv - 1 - v;
      ans |= vv - 1;
    }
  for (auto i : mp)
    if (i.second.first == 1) {
      int v = i.first, vv = 1, tmp = 0;
      for (; vv <= v; vv <<= 1)
        ;
      for (; vv; vv >>= 1)
        if (!(ans & vv) && tmp + vv <= v) tmp += vv, ans |= vv;
      lim[i.second.second[0]] = tmp;
    }
  puts("YES");
  for (int i = (int)(1); i <= (int)(n); i++) printf("%d ", lim[i]);
}
