n, m = map(int, input().split()) # cnt[i] ... Ai を含む区間の LIS の最小値 cnt = [n] * n # edge ... 最小単位の区間列挙 edge = {0, n} lrk = [] for _ in range(m): l, r, k = map(int, input().split()) l -= 1 lrk.append((l, r, k)) edge.add(l) edge.add(r) for i in range(l, r): cnt[i] = min(cnt[i], k) edge = sorted(edge) edge_idx = {e: i for i, e in enumerate(edge)} # cnt を圧縮 # 最小単位の区間、その区間が取る LIS をまとめる cnt_comp = [cnt[i] for i in edge[:-1]] for i in range(len(cnt_comp)): length = edge[i + 1] - edge[i] cnt_comp[i] = min(cnt_comp[i], length) # 各区間 [l:r) について LIS が k となるように最小単位の区間に値を割り振る # i 番目の最小単位の区間の要素が i-1 番目の区間の要素より diff[i] だけ大きくなるように # LIS([edge[i - 1]:edge[i]]) + diff[i] = LIS([edge[i - 1]:edge[i + 1]]) diff = [0] * len(cnt_comp) for l, r, k in lrk: li = edge_idx[l] ri = edge_idx[r] if sum(cnt_comp[li:ri]) < k: exit(print("No")) remain = k - cnt_comp[li] for i in range(li + 1, ri): diff[i] = min(cnt_comp[i], remain) remain -= diff[i] if remain: exit(print("No")) # 構築 # 最小単位の区間内は 1234444... のように構成する # diff を参考に構成し、最後に 1~N で埋める ans = [1] * n current = 1 for i in range(len(cnt_comp)): use = 0 if i != 0: use = ans[edge[i] - 1] - cnt_comp[i] + diff[i] for j in range(edge[i], edge[i + 1]): ans[j] = min(j - edge[i] + 1, cnt_comp[i]) + use mi = min(ans) for i in range(n): ans[i] += 1 - mi print("Yes") print(*ans)