#include <bits/stdc++.h>
using namespace std;
const int64_t inf = (int64_t)1e18 + 42;
template<class T, bool (*cmp)(T, T)>
class Heap {
private:
vector<T> heap_values;
vector<int> heap, pos_in_heap;
void push_up(int id) {
while(id > 0 &&
cmp(heap_values[heap[id]], heap_values[heap[(id - 1) / 2]])) {
swap(heap[id], heap[(id - 1) / 2]);
swap(pos_in_heap[heap[id]], pos_in_heap[heap[(id - 1) / 2]]);
id = (id - 1) / 2;
}
}
void push_down(int id) {
while(2 * id + 1 < heap.size()) {
int child = 2 * id + 1;
if(child + 1 < heap.size() &&
cmp(heap_values[heap[child + 1]], heap_values[heap[child]])) {
child++;
}
if(cmp(heap_values[heap[id]], heap_values[heap[child]])) {
break;
}
swap(heap[id], heap[child]);
swap(pos_in_heap[heap[id]], pos_in_heap[heap[child]]);
id = child;
}
}
public:
Heap() { clear(); }
void clear() {
heap.clear();
heap_values.clear();
pos_in_heap.clear();
}
int push(T val) {
heap.push_back(heap_values.size());
pos_in_heap.push_back(heap.size() - 1);
heap_values.push_back(val);
push_up(heap.size() - 1);
return heap_values.size() - 1;
}
T pop() {
int ret_node = heap[0];
swap(pos_in_heap[ret_node], pos_in_heap[heap.back()]);
swap(heap[0], heap[heap.size() - 1]);
heap.pop_back();
pos_in_heap[ret_node] = -1;
if(heap.size() > 0) {
push_down(0);
}
return heap_values[ret_node];
}
size_t size() { return heap.size(); }
bool empty() { return heap.size() == 0; }
T top() { return heap_values[heap[0]]; }
int top_node() { return heap[0]; }
void update(int node, T val) {
int p = pos_in_heap[node];
bool is_push_down = cmp(heap_values[node], val);
if(is_push_down) {
heap_values[node] = val;
push_down(p);
} else {
heap_values[node] = val;
push_up(p);
}
}
};
int n, m, real_n;
vector<tuple<int, int, int>> edges;
vector<vector<pair<int, int>>> adj;
void read() {
cin >> n >> m;
adj.assign(5 * n + 1, {});
real_n = n;
for(int i = 0; i < m; i++) {
int u, l, r;
cin >> u >> l >> r;
u--, l--, r--;
edges.emplace_back(u, l, r);
}
}
vector<int> node;
int build_tree_struct(int l, int r, int idx) {
if(l == r) {
int v = n++;
adj[v].push_back({l, 1});
return node[idx] = v;
}
int mid = (l + r) / 2;
int v = n++;
adj[v].push_back({build_tree_struct(l, mid, 2 * idx + 1), 0});
adj[v].push_back({build_tree_struct(mid + 1, r, 2 * idx + 2), mid - l + 1});
return node[idx] = v;
}
void add_edges(int u, int ql, int qr, int l, int r, int idx) {
if(ql > r || qr < l) {
return;
}
if(ql <= l && r <= qr) {
adj[u].push_back({node[idx], l - ql});
return;
}
int mid = (l + r) / 2;
add_edges(u, ql, qr, l, mid, 2 * idx + 1);
add_edges(u, ql, qr, mid + 1, r, 2 * idx + 2);
}
bool cmp_min(int64_t a, int64_t b) { return a < b; }
vector<int64_t> dijkstra(int start) {
vector<int64_t> dist(n, inf);
vector<int> pq_node(n, -1);
vector<int> pq_node_to_ver(n, -1);
Heap<int64_t, cmp_min> pq;
function<void(int, int64_t)> update = [&](int u, int64_t d) {
dist[u] = min(dist[u], d);
if(pq_node[u] == -1) {
pq_node[u] = pq.push(dist[u]);
pq_node_to_ver[pq_node[u]] = u;
} else {
pq.update(pq_node[u], dist[u]);
}
};
update(start, 0);
while(!pq.empty()) {
int u = pq_node_to_ver[pq.top_node()];
pq.pop();
for(auto [v, w]: adj[u]) {
update(v, dist[u] + w);
}
}
return dist;
}
void solve() {
node.resize(4 * real_n + 1);
build_tree_struct(0, real_n - 1, 0);
for(auto [u, l, r]: edges) {
add_edges(u, l, r, 0, real_n - 1, 0);
}
vector<int64_t> ans = dijkstra(0);
for(int i = 0; i < real_n; i++) {
int64_t res = ans[i];
if(res == inf) {
cout << -1 << ' ';
} else {
cout << res << ' ';
}
}
cout << '\n';
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
read();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQ2NF90IGluZiA9IChpbnQ2NF90KTFlMTggKyA0MjsKCnRlbXBsYXRlPGNsYXNzIFQsIGJvb2wgKCpjbXApKFQsIFQpPgpjbGFzcyBIZWFwIHsKICBwcml2YXRlOgogICAgdmVjdG9yPFQ+IGhlYXBfdmFsdWVzOwogICAgdmVjdG9yPGludD4gaGVhcCwgcG9zX2luX2hlYXA7CgogICAgdm9pZCBwdXNoX3VwKGludCBpZCkgewogICAgICAgIHdoaWxlKGlkID4gMCAmJgogICAgICAgICAgICAgIGNtcChoZWFwX3ZhbHVlc1toZWFwW2lkXV0sIGhlYXBfdmFsdWVzW2hlYXBbKGlkIC0gMSkgLyAyXV0pKSB7CiAgICAgICAgICAgIHN3YXAoaGVhcFtpZF0sIGhlYXBbKGlkIC0gMSkgLyAyXSk7CiAgICAgICAgICAgIHN3YXAocG9zX2luX2hlYXBbaGVhcFtpZF1dLCBwb3NfaW5faGVhcFtoZWFwWyhpZCAtIDEpIC8gMl1dKTsKICAgICAgICAgICAgaWQgPSAoaWQgLSAxKSAvIDI7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgcHVzaF9kb3duKGludCBpZCkgewogICAgICAgIHdoaWxlKDIgKiBpZCArIDEgPCBoZWFwLnNpemUoKSkgewogICAgICAgICAgICBpbnQgY2hpbGQgPSAyICogaWQgKyAxOwogICAgICAgICAgICBpZihjaGlsZCArIDEgPCBoZWFwLnNpemUoKSAmJgogICAgICAgICAgICAgICBjbXAoaGVhcF92YWx1ZXNbaGVhcFtjaGlsZCArIDFdXSwgaGVhcF92YWx1ZXNbaGVhcFtjaGlsZF1dKSkgewogICAgICAgICAgICAgICAgY2hpbGQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihjbXAoaGVhcF92YWx1ZXNbaGVhcFtpZF1dLCBoZWFwX3ZhbHVlc1toZWFwW2NoaWxkXV0pKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2FwKGhlYXBbaWRdLCBoZWFwW2NoaWxkXSk7CiAgICAgICAgICAgIHN3YXAocG9zX2luX2hlYXBbaGVhcFtpZF1dLCBwb3NfaW5faGVhcFtoZWFwW2NoaWxkXV0pOwogICAgICAgICAgICBpZCA9IGNoaWxkOwogICAgICAgIH0KICAgIH0KCiAgcHVibGljOgogICAgSGVhcCgpIHsgY2xlYXIoKTsgfQoKICAgIHZvaWQgY2xlYXIoKSB7CiAgICAgICAgaGVhcC5jbGVhcigpOwogICAgICAgIGhlYXBfdmFsdWVzLmNsZWFyKCk7CiAgICAgICAgcG9zX2luX2hlYXAuY2xlYXIoKTsKICAgIH0KCiAgICBpbnQgcHVzaChUIHZhbCkgewogICAgICAgIGhlYXAucHVzaF9iYWNrKGhlYXBfdmFsdWVzLnNpemUoKSk7CiAgICAgICAgcG9zX2luX2hlYXAucHVzaF9iYWNrKGhlYXAuc2l6ZSgpIC0gMSk7CiAgICAgICAgaGVhcF92YWx1ZXMucHVzaF9iYWNrKHZhbCk7CiAgICAgICAgcHVzaF91cChoZWFwLnNpemUoKSAtIDEpOwogICAgICAgIHJldHVybiBoZWFwX3ZhbHVlcy5zaXplKCkgLSAxOwogICAgfQoKICAgIFQgcG9wKCkgewogICAgICAgIGludCByZXRfbm9kZSA9IGhlYXBbMF07CiAgICAgICAgc3dhcChwb3NfaW5faGVhcFtyZXRfbm9kZV0sIHBvc19pbl9oZWFwW2hlYXAuYmFjaygpXSk7CiAgICAgICAgc3dhcChoZWFwWzBdLCBoZWFwW2hlYXAuc2l6ZSgpIC0gMV0pOwogICAgICAgIGhlYXAucG9wX2JhY2soKTsKICAgICAgICBwb3NfaW5faGVhcFtyZXRfbm9kZV0gPSAtMTsKICAgICAgICBpZihoZWFwLnNpemUoKSA+IDApIHsKICAgICAgICAgICAgcHVzaF9kb3duKDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGVhcF92YWx1ZXNbcmV0X25vZGVdOwogICAgfQoKICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gaGVhcC5zaXplKCk7IH0KICAgIGJvb2wgZW1wdHkoKSB7IHJldHVybiBoZWFwLnNpemUoKSA9PSAwOyB9CgogICAgVCB0b3AoKSB7IHJldHVybiBoZWFwX3ZhbHVlc1toZWFwWzBdXTsgfQoKICAgIGludCB0b3Bfbm9kZSgpIHsgcmV0dXJuIGhlYXBbMF07IH0KCiAgICB2b2lkIHVwZGF0ZShpbnQgbm9kZSwgVCB2YWwpIHsKICAgICAgICBpbnQgcCA9IHBvc19pbl9oZWFwW25vZGVdOwogICAgICAgIGJvb2wgaXNfcHVzaF9kb3duID0gY21wKGhlYXBfdmFsdWVzW25vZGVdLCB2YWwpOwoKICAgICAgICBpZihpc19wdXNoX2Rvd24pIHsKICAgICAgICAgICAgaGVhcF92YWx1ZXNbbm9kZV0gPSB2YWw7CiAgICAgICAgICAgIHB1c2hfZG93bihwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoZWFwX3ZhbHVlc1tub2RlXSA9IHZhbDsKICAgICAgICAgICAgcHVzaF91cChwKTsKICAgICAgICB9CiAgICB9Cn07CgppbnQgbiwgbSwgcmVhbF9uOwp2ZWN0b3I8dHVwbGU8aW50LCBpbnQsIGludD4+IGVkZ2VzOwp2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LCBpbnQ+Pj4gYWRqOwoKdm9pZCByZWFkKCkgewogICAgY2luID4+IG4gPj4gbTsKICAgIGFkai5hc3NpZ24oNSAqIG4gKyAxLCB7fSk7CiAgICByZWFsX24gPSBuOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgICBpbnQgdSwgbCwgcjsKICAgICAgICBjaW4gPj4gdSA+PiBsID4+IHI7CiAgICAgICAgdS0tLCBsLS0sIHItLTsKICAgICAgICBlZGdlcy5lbXBsYWNlX2JhY2sodSwgbCwgcik7CiAgICB9Cn0KCnZlY3RvcjxpbnQ+IG5vZGU7CgppbnQgYnVpbGRfdHJlZV9zdHJ1Y3QoaW50IGwsIGludCByLCBpbnQgaWR4KSB7CiAgICBpZihsID09IHIpIHsKICAgICAgICBpbnQgdiA9IG4rKzsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHtsLCAxfSk7CiAgICAgICAgcmV0dXJuIG5vZGVbaWR4XSA9IHY7CiAgICB9CgogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgaW50IHYgPSBuKys7CiAgICBhZGpbdl0ucHVzaF9iYWNrKHtidWlsZF90cmVlX3N0cnVjdChsLCBtaWQsIDIgKiBpZHggKyAxKSwgMH0pOwogICAgYWRqW3ZdLnB1c2hfYmFjayh7YnVpbGRfdHJlZV9zdHJ1Y3QobWlkICsgMSwgciwgMiAqIGlkeCArIDIpLCBtaWQgLSBsICsgMX0pOwogICAgcmV0dXJuIG5vZGVbaWR4XSA9IHY7Cn0KCnZvaWQgYWRkX2VkZ2VzKGludCB1LCBpbnQgcWwsIGludCBxciwgaW50IGwsIGludCByLCBpbnQgaWR4KSB7CiAgICBpZihxbCA+IHIgfHwgcXIgPCBsKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYocWwgPD0gbCAmJiByIDw9IHFyKSB7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7bm9kZVtpZHhdLCBsIC0gcWx9KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgYWRkX2VkZ2VzKHUsIHFsLCBxciwgbCwgbWlkLCAyICogaWR4ICsgMSk7CiAgICBhZGRfZWRnZXModSwgcWwsIHFyLCBtaWQgKyAxLCByLCAyICogaWR4ICsgMik7Cn0KCmJvb2wgY21wX21pbihpbnQ2NF90IGEsIGludDY0X3QgYikgeyByZXR1cm4gYSA8IGI7IH0KCnZlY3RvcjxpbnQ2NF90PiBkaWprc3RyYShpbnQgc3RhcnQpIHsKICAgIHZlY3RvcjxpbnQ2NF90PiBkaXN0KG4sIGluZik7CiAgICB2ZWN0b3I8aW50PiBwcV9ub2RlKG4sIC0xKTsKICAgIHZlY3RvcjxpbnQ+IHBxX25vZGVfdG9fdmVyKG4sIC0xKTsKICAgIEhlYXA8aW50NjRfdCwgY21wX21pbj4gcHE7CgogICAgZnVuY3Rpb248dm9pZChpbnQsIGludDY0X3QpPiB1cGRhdGUgPSBbJl0oaW50IHUsIGludDY0X3QgZCkgewogICAgICAgIGRpc3RbdV0gPSBtaW4oZGlzdFt1XSwgZCk7CiAgICAgICAgaWYocHFfbm9kZVt1XSA9PSAtMSkgewogICAgICAgICAgICBwcV9ub2RlW3VdID0gcHEucHVzaChkaXN0W3VdKTsKICAgICAgICAgICAgcHFfbm9kZV90b192ZXJbcHFfbm9kZVt1XV0gPSB1OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBxLnVwZGF0ZShwcV9ub2RlW3VdLCBkaXN0W3VdKTsKICAgICAgICB9CiAgICB9OwoKICAgIHVwZGF0ZShzdGFydCwgMCk7CiAgICB3aGlsZSghcHEuZW1wdHkoKSkgewogICAgICAgIGludCB1ID0gcHFfbm9kZV90b192ZXJbcHEudG9wX25vZGUoKV07CiAgICAgICAgcHEucG9wKCk7CgogICAgICAgIGZvcihhdXRvIFt2LCB3XTogYWRqW3VdKSB7CiAgICAgICAgICAgIHVwZGF0ZSh2LCBkaXN0W3VdICsgdyk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBkaXN0Owp9Cgp2b2lkIHNvbHZlKCkgewogICAgbm9kZS5yZXNpemUoNCAqIHJlYWxfbiArIDEpOwogICAgYnVpbGRfdHJlZV9zdHJ1Y3QoMCwgcmVhbF9uIC0gMSwgMCk7CgogICAgZm9yKGF1dG8gW3UsIGwsIHJdOiBlZGdlcykgewogICAgICAgIGFkZF9lZGdlcyh1LCBsLCByLCAwLCByZWFsX24gLSAxLCAwKTsKICAgIH0KCiAgICB2ZWN0b3I8aW50NjRfdD4gYW5zID0gZGlqa3N0cmEoMCk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcmVhbF9uOyBpKyspIHsKICAgICAgICBpbnQ2NF90IHJlcyA9IGFuc1tpXTsKICAgICAgICBpZihyZXMgPT0gaW5mKSB7CiAgICAgICAgICAgIGNvdXQgPDwgLTEgPDwgJyAnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgcmVzIDw8ICcgJzsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8ICdcbic7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIHJlYWQoKTsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQo=