#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int inf = 1e9;
struct Seg {
int n;
vector<int> mx;
Seg(int n) : n(n), mx(4 * n, -1) {}
void updMax(int node, int start, int end, int l, int r, int v) {
if(start > end || start > r || end < l) return;
if(start >= l && end <= r) {
mx[node] = max(mx[node], v);
return;
}
int mid = (start + end) / 2;
updMax(node << 1, start, mid, l, r, v);
updMax(node << 1 | 1, mid + 1, end, l, r, v);
}
int find(int node, int start, int end, int v) {
if(start == end) return mx[node];
int mid = (start + end) / 2;
int res = (v <= mid) ? find(node << 1, start, mid, v) : find(node << 1 | 1, mid + 1, end, v);
return max(res, mx[node]);
}
void upd(int l, int r, int v) { updMax(1, 0, n - 1, l, r, v);}
int qry(int id) { return find(1, 0, n - 1, id);}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
vector<int> ql(q), qr(q), qv(q);
map<int, pair<int, int>> isect;
Seg seg(n);
for (int i = 0; i < q; ++i) {
cin >> ql[i] >> qr[i] >> qv[i];
if(!isect.count(qv[i])) {
isect[qv[i]] = {ql[i], qr[i]};
}
else {
isect[qv[i]].first = max(isect[qv[i]].first, ql[i]);
isect[qv[i]].second = min(isect[qv[i]].second, qr[i]);
}
}
auto die = [&]() {
for (int j = 0; j < n; ++j) {
cout << -1 << " ";
}
exit(0);
};
for (int i = 0; i < q; ++i)
seg.upd(ql[i], qr[i], qv[i]);
vector<int> B(n);
for (int i = 0; i < n; ++i)
B[i] = seg.qry(i);
map<int, vector<int>> byR;
for (int i = 0; i < n; ++i) byR[B[i]].push_back(i);
vector<int> res(n, -1);
vector<char> used(n, 0), taken(n, 0);
for (auto &[ans, inter] : isect) {
int lA = inter.first, rA = inter.second;
if(lA > rA) die();
auto bit = byR.find(ans);
if(bit == byR.end()) die();
auto& plist = bit->second;
auto it = ranges::lower_bound(plist, lA);
if(it == plist.end() || *it > rA) die();
int cp = *it;
res[cp] = ans;
used[cp] = 1;
taken[ans] = 1;
}
vector<pair<int, int>> rem_p;
for (int i = 0; i < n; ++i) if(!used[i]) rem_p.push_back({B[i], i});
vector<int> rem_v;
for (int i = 0; i < n; ++i) if(!taken[i]) rem_v.push_back(i);
sort(rem_p.rbegin(), rem_p.rend());
sort(rem_v.rbegin(), rem_v.rend());
for (int i = 0; i < (int)rem_p.size(); ++i) {
if(rem_v[i] < rem_p[i].first) die();
res[rem_p[i].second] = rem_v[i];
}
for (int &i : res)
cout << i << " ";
return 0;
}