#include <bits/stdc++.h>
using ll = long long;
using namespace std;
class segtree {
public:
ll n;
std::vector<ll> seg;
vector<ll> lazyadd;
vector<ll> lazyset;
vector<ll> hasset;
segtree(ll n) : n(n), seg(4 * n + 5, 1e18), lazyadd(4 * n + 5), lazyset(4 * n + 5), hasset(4 * n + 5) {}
void applyadd(ll v, ll add, ll len) {
seg[v] += add;
if (hasset[v]) {
lazyset[v] += add;
} else {
lazyadd[v] += add;
}
}
void applyset(ll v, ll newval, ll len) {
seg[v] = newval;
lazyset[v] = newval;
lazyadd[v] = 0;
hasset[v] = 1;
}
void push(ll v, ll l, ll r) {
if (l == r)
return;
ll m = l + (r - l) / 2;
ll leftlen = m - l + 1;
ll rightlen = r - m;
if (hasset[v]) {
applyset(2 * v, lazyset[v], leftlen);
applyset(2 * v + 1, lazyset[v], rightlen);
hasset[v] = 0;
lazyset[v] = 0;
}
if (lazyadd[v] != 0) {
applyadd(2 * v, lazyadd[v], leftlen);
applyadd(2 * v + 1, lazyadd[v], rightlen);
lazyadd[v] = 0;
}
}
void set(ll v, ll l, ll r, ll idx, ll del) {
if (idx > r or idx < l) {
return;
}
if (l == r) {
seg[v] = del;
lazyadd[v] = 0;
lazyset[v] = 0;
hasset[v] = 0;
return;
}
push(v, l, r);
ll m = l + (r - l) / 2;
set(2 * v, l, m, idx, del);
set(2 * v + 1, m + 1, r, idx, del);
seg[v] = min(seg[2 * v], seg[2 * v + 1]);
}
void set(ll idx, ll del) {
set(1, 0, n - 1, idx, del);
}
ll q(ll v, ll l, ll r, ll ql, ll qr) {
if (qr < l or ql > r) {
return 1e18;
}
if (ql <= l and r <= qr) {
return seg[v];
}
push(v, l, r);
ll m = l + (r - l) / 2;
return min(q(2 * v, l, m, ql, qr), q(2 * v + 1, m + 1, r, ql, qr));
}
ll q(ll ql, ll qr) {
return q(1, 0, n - 1, ql, qr);
}
void rangeadd(ll v, ll l, ll r, ll ql, ll qr, ll del) {
if (qr < l or ql > r) {
return;
}
if (ql <= l and r <= qr) {
return applyadd(v, del, (r - l + 1));
}
push(v, l, r);
ll m = l + (r - l) / 2;
rangeadd(2 * v, l, m, ql, qr, del);
rangeadd(2 * v + 1, m + 1, r, ql, qr, del);
seg[v] = min(seg[2 * v], seg[2 * v + 1]);
}
void rangeadd(ll ql, ll qr, ll del) {
return rangeadd(1, 0, n - 1, ql, qr, del);
}
void rangeset(ll v, ll l, ll r, ll ql, ll qr, ll del) {
if (qr < l or ql > r) {
return;
}
if (ql <= l and r <= qr) {
return applyset(v, del, r - l + 1);
}
push(v, l, r);
ll m = l + (r - l) / 2;
rangeset(2 * v, l, m, ql, qr, del);
rangeset(2 * v + 1, m + 1, r, ql, qr, del);
seg[v] = min(seg[2 * v], seg[2 * v + 1]);
}
void rangeset(ll ql, ll qr, ll del) {
return rangeset(1, 0, n - 1, ql, qr, del);
}
};
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n, q;
cin >> n >> q;
vector<pair<ll, pair<ll, ll>>> qu(q);
for (int i = 0; i < q; i++) {
cin >> qu[i].second.first >> qu[i].second.second >> qu[i].first;
}
sort(qu.begin(), qu.end());
reverse(qu.begin(), qu.end());
segtree st(n);
for (int i = 0; i < n; i++) {
st.set(i, 1e18);
}
for (int i = 0; i < q; i++) {
auto [num, ra] = qu[i];
auto [l, r] = ra;
while (i + 1 < q and num == qu[i + 1].first) {
auto [bnum, bra] = qu[i + 1];
auto [bl, br] = bra;
l = min(l, bl);
r = max(r, br);
i++;
}
st.rangeset(l, r, num);
}
ll check = 0;
for (int i = 0; i < q; i++) {
auto [num, ra] = qu[i];
auto [l, r] = ra;
if (st.q(l, r) == num)
continue;
else {
check = 1;
break;
}
}
if (check == 1) {
for (int i = 0; i < n; i++) {
cout << -1 << " ";
}
return 0;
}
vector<ll> c(n, 1);
ll counter = n - 1;
vector<ll> a(n, 1e18);
for (int i = 0; i < q; i++) {
auto [num, ra] = qu[i];
auto [l, r] = ra;
ll ml = l, mr = r;
while (i + 1 < q and num == qu[i + 1].first) {
auto [bnum, bra] = qu[i + 1];
auto [bl, br] = bra;
l = min(l, bl);
r = max(r, br);
ml = max(l, bl);
mr = min(r, br);
i++;
}
a[ml] = num;
c[num] = 0;
for (int i = l; i <= r; i++) {
if (a[i] != 1e18)
continue;
while (c[counter] == 0) {
counter--;
}
if (counter < 0) {
for (int i = 0; i < n; i++) {
cout << -1 << " ";
}
return 0;
}
a[i] = counter;
counter--;
}
}
for (int i = 0; i < n; i++) {
st.set(i, a[i]);
}
check = 0;
for (int i = 0; i < q; i++) {
auto [num, ra] = qu[i];
auto [l, r] = ra;
if (st.q(l, r) == num)
continue;
else {
check = 1;
break;
}
}
if (check == 1) {
for (int i = 0; i < n; i++) {
cout << -1 << " ";
}
return 0;
}
for (auto i : a) {
cout << i << " ";
}
return 0;
}