#include <bits/stdc++.h>
using namespace std;
struct LCT {
struct Node {
int ch[2], fa;
int val, mx; // trọng số cạnh nối tới cha
int id_mx; // id của cạnh có trọng số lớn nhất trên đường
bool rev;
};
vector<Node> t;
LCT(int n = 0) { t.assign(n + 1, {}); }
bool isRoot(int x) {
int f = t[x].fa;
return f == 0 || (t[f].ch[0] != x && t[f].ch[1] != x);
}
void pushUp(int x) {
t[x].mx = t[x].val;
t[x].id_mx = x;
for (int d = 0; d < 2; ++d) {
int y = t[x].ch[d];
if (y && t[y].mx > t[x].mx) {
t[x].mx = t[y].mx;
t[x].id_mx = t[y].id_mx;
}
}
}
void pushRev(int x) {
swap(t[x].ch[0], t[x].ch[1]);
t[x].rev ^= 1;
}
void pushDown(int x) {
if (t[x].rev) {
if (t[x].ch[0]) pushRev(t[x].ch[0]);
if (t[x].ch[1]) pushRev(t[x].ch[1]);
t[x].rev = 0;
}
}
void rotate(int x) {
int y = t[x].fa, z = t[y].fa;
int k = (t[y].ch[1] == x);
if (!isRoot(y)) t[z].ch[t[z].ch[1] == y] = x;
t[x].fa = z;
t[y].ch[k] = t[x].ch[k ^ 1];
if (t[x].ch[k ^ 1]) t[t[x].ch[k ^ 1]].fa = y;
t[x].ch[k ^ 1] = y;
t[y].fa = x;
pushUp(y);
pushUp(x);
}
void pushAll(int x) {
if (!isRoot(x)) pushAll(t[x].fa);
pushDown(x);
}
void splay(int x) {
pushAll(x);
while (!isRoot(x)) {
int y = t[x].fa, z = t[y].fa;
if (!isRoot(y))
(t[z].ch[0] == y) ^ (t[y].ch[0] == x) ? rotate(x) : rotate(y);
rotate(x);
}
pushUp(x);
}
void access(int x) {
int last = 0;
for (int y = x; y; y = t[y].fa) {
splay(y);
t[y].ch[1] = last;
pushUp(y);
last = y;
}
splay(x);
}
void makeRoot(int x) {
access(x);
pushRev(x);
}
int findRoot(int x) {
access(x);
while (t[x].ch[0]) {
pushDown(x);
x = t[x].ch[0];
}
splay(x);
return x;
}
void link(int x, int y) {
makeRoot(x);
if (findRoot(y) != x) t[x].fa = y;
}
void cut(int x, int y) {
makeRoot(x);
access(y);
if (t[y].ch[0] == x) {
t[y].ch[0] = t[x].fa = 0;
pushUp(y);
}
}
// Cập nhật trọng số cạnh (nút đại diện cho cạnh)
void setVal(int x, int v) {
t[x].val = v;
pushUp(x);
}
// Truy vấn cạnh lớn nhất trên đường u-v
pair<int,int> queryMax(int u, int v) {
makeRoot(u);
access(v);
return {t[v].mx, t[v].id_mx};
}
};
struct Edge {
int u, v, w;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
int total = n + m; // node 1..n là đỉnh, n+1..n+m là cạnh
LCT lct(total);
vector<Edge> edges(m + 1);
for (int i = 1; i <= m; i++) {
int u, v, w, s, t_;
cin >> u >> v >> w >> s >> t_;
edges[i] = {u, v, w};
int e = n + i;
lct.setVal(e, w);
int ru = lct.findRoot(u), rv = lct.findRoot(v);
if (ru != rv) {
lct.link(u, e);
lct.link(e, v);
} else {
auto [mx, id] = lct.queryMax(u, v);
if (mx > w) {
int eid = id - n;
lct.cut(edges[eid].u, id);
lct.cut(edges[eid].v, id);
lct.link(u, e);
lct.link(e, v);
edges[eid] = edges[i]; // cập nhật cạnh bị thay
}
}
if (lct.findRoot(s) == lct.findRoot(t_)) {
cout << lct.queryMax(s, t_).first << "\n";
} else {
cout << -1 << "\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTENUIHsKc3RydWN0IE5vZGUgewppbnQgY2hbMl0sIGZhOwppbnQgdmFsLCBteDsgLy8gdHLhu41uZyBz4buRIGPhuqFuaCBu4buRaSB04bubaSBjaGEKaW50IGlkX214OyAgIC8vIGlkIGPhu6dhIGPhuqFuaCBjw7MgdHLhu41uZyBz4buRIGzhu5tuIG5o4bqldCB0csOqbiDEkcaw4budbmcKYm9vbCByZXY7Cn07CnZlY3RvcjxOb2RlPiB0OwoKCkxDVChpbnQgbiA9IDApIHsgdC5hc3NpZ24obiArIDEsIHt9KTsgfQoKYm9vbCBpc1Jvb3QoaW50IHgpIHsKICAgIGludCBmID0gdFt4XS5mYTsKICAgIHJldHVybiBmID09IDAgfHwgKHRbZl0uY2hbMF0gIT0geCAmJiB0W2ZdLmNoWzFdICE9IHgpOwp9Cgp2b2lkIHB1c2hVcChpbnQgeCkgewogICAgdFt4XS5teCA9IHRbeF0udmFsOwogICAgdFt4XS5pZF9teCA9IHg7CiAgICBmb3IgKGludCBkID0gMDsgZCA8IDI7ICsrZCkgewogICAgICAgIGludCB5ID0gdFt4XS5jaFtkXTsKICAgICAgICBpZiAoeSAmJiB0W3ldLm14ID4gdFt4XS5teCkgewogICAgICAgICAgICB0W3hdLm14ID0gdFt5XS5teDsKICAgICAgICAgICAgdFt4XS5pZF9teCA9IHRbeV0uaWRfbXg7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHB1c2hSZXYoaW50IHgpIHsKICAgIHN3YXAodFt4XS5jaFswXSwgdFt4XS5jaFsxXSk7CiAgICB0W3hdLnJldiBePSAxOwp9Cgp2b2lkIHB1c2hEb3duKGludCB4KSB7CiAgICBpZiAodFt4XS5yZXYpIHsKICAgICAgICBpZiAodFt4XS5jaFswXSkgcHVzaFJldih0W3hdLmNoWzBdKTsKICAgICAgICBpZiAodFt4XS5jaFsxXSkgcHVzaFJldih0W3hdLmNoWzFdKTsKICAgICAgICB0W3hdLnJldiA9IDA7CiAgICB9Cn0KCnZvaWQgcm90YXRlKGludCB4KSB7CiAgICBpbnQgeSA9IHRbeF0uZmEsIHogPSB0W3ldLmZhOwogICAgaW50IGsgPSAodFt5XS5jaFsxXSA9PSB4KTsKICAgIGlmICghaXNSb290KHkpKSB0W3pdLmNoW3Rbel0uY2hbMV0gPT0geV0gPSB4OwogICAgdFt4XS5mYSA9IHo7CiAgICB0W3ldLmNoW2tdID0gdFt4XS5jaFtrIF4gMV07CiAgICBpZiAodFt4XS5jaFtrIF4gMV0pIHRbdFt4XS5jaFtrIF4gMV1dLmZhID0geTsKICAgIHRbeF0uY2hbayBeIDFdID0geTsKICAgIHRbeV0uZmEgPSB4OwogICAgcHVzaFVwKHkpOwogICAgcHVzaFVwKHgpOwp9Cgp2b2lkIHB1c2hBbGwoaW50IHgpIHsKICAgIGlmICghaXNSb290KHgpKSBwdXNoQWxsKHRbeF0uZmEpOwogICAgcHVzaERvd24oeCk7Cn0KCnZvaWQgc3BsYXkoaW50IHgpIHsKICAgIHB1c2hBbGwoeCk7CiAgICB3aGlsZSAoIWlzUm9vdCh4KSkgewogICAgICAgIGludCB5ID0gdFt4XS5mYSwgeiA9IHRbeV0uZmE7CiAgICAgICAgaWYgKCFpc1Jvb3QoeSkpCiAgICAgICAgICAgICh0W3pdLmNoWzBdID09IHkpIF4gKHRbeV0uY2hbMF0gPT0geCkgPyByb3RhdGUoeCkgOiByb3RhdGUoeSk7CiAgICAgICAgcm90YXRlKHgpOwogICAgfQogICAgcHVzaFVwKHgpOwp9Cgp2b2lkIGFjY2VzcyhpbnQgeCkgewogICAgaW50IGxhc3QgPSAwOwogICAgZm9yIChpbnQgeSA9IHg7IHk7IHkgPSB0W3ldLmZhKSB7CiAgICAgICAgc3BsYXkoeSk7CiAgICAgICAgdFt5XS5jaFsxXSA9IGxhc3Q7CiAgICAgICAgcHVzaFVwKHkpOwogICAgICAgIGxhc3QgPSB5OwogICAgfQogICAgc3BsYXkoeCk7Cn0KCnZvaWQgbWFrZVJvb3QoaW50IHgpIHsKICAgIGFjY2Vzcyh4KTsKICAgIHB1c2hSZXYoeCk7Cn0KCmludCBmaW5kUm9vdChpbnQgeCkgewogICAgYWNjZXNzKHgpOwogICAgd2hpbGUgKHRbeF0uY2hbMF0pIHsKICAgICAgICBwdXNoRG93bih4KTsKICAgICAgICB4ID0gdFt4XS5jaFswXTsKICAgIH0KICAgIHNwbGF5KHgpOwogICAgcmV0dXJuIHg7Cn0KCnZvaWQgbGluayhpbnQgeCwgaW50IHkpIHsKICAgIG1ha2VSb290KHgpOwogICAgaWYgKGZpbmRSb290KHkpICE9IHgpIHRbeF0uZmEgPSB5Owp9Cgp2b2lkIGN1dChpbnQgeCwgaW50IHkpIHsKICAgIG1ha2VSb290KHgpOwogICAgYWNjZXNzKHkpOwogICAgaWYgKHRbeV0uY2hbMF0gPT0geCkgewogICAgICAgIHRbeV0uY2hbMF0gPSB0W3hdLmZhID0gMDsKICAgICAgICBwdXNoVXAoeSk7CiAgICB9Cn0KCi8vIEPhuq1wIG5o4bqtdCB0cuG7jW5nIHPhu5EgY+G6oW5oIChuw7p0IMSR4bqhaSBkaeG7h24gY2hvIGPhuqFuaCkKdm9pZCBzZXRWYWwoaW50IHgsIGludCB2KSB7CiAgICB0W3hdLnZhbCA9IHY7CiAgICBwdXNoVXAoeCk7Cn0KCi8vIFRydXkgduG6pW4gY+G6oW5oIGzhu5tuIG5o4bqldCB0csOqbiDEkcaw4budbmcgdS12CnBhaXI8aW50LGludD4gcXVlcnlNYXgoaW50IHUsIGludCB2KSB7CiAgICBtYWtlUm9vdCh1KTsKICAgIGFjY2Vzcyh2KTsKICAgIHJldHVybiB7dFt2XS5teCwgdFt2XS5pZF9teH07Cn0KCgp9OwoKc3RydWN0IEVkZ2UgewppbnQgdSwgdiwgdzsKfTsKCmludCBtYWluKCkgewppb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CmNpbi50aWUobnVsbHB0cik7CgoKaW50IG4sIG07CmNpbiA+PiBuID4+IG07CmludCB0b3RhbCA9IG4gKyBtOyAvLyBub2RlIDEuLm4gbMOgIMSR4buJbmgsIG4rMS4ubittIGzDoCBj4bqhbmgKCkxDVCBsY3QodG90YWwpOwp2ZWN0b3I8RWRnZT4gZWRnZXMobSArIDEpOwoKZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICBpbnQgdSwgdiwgdywgcywgdF87CiAgICBjaW4gPj4gdSA+PiB2ID4+IHcgPj4gcyA+PiB0XzsKICAgIGVkZ2VzW2ldID0ge3UsIHYsIHd9OwoKICAgIGludCBlID0gbiArIGk7CiAgICBsY3Quc2V0VmFsKGUsIHcpOwoKICAgIGludCBydSA9IGxjdC5maW5kUm9vdCh1KSwgcnYgPSBsY3QuZmluZFJvb3Qodik7CiAgICBpZiAocnUgIT0gcnYpIHsKICAgICAgICBsY3QubGluayh1LCBlKTsKICAgICAgICBsY3QubGluayhlLCB2KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXV0byBbbXgsIGlkXSA9IGxjdC5xdWVyeU1heCh1LCB2KTsKICAgICAgICBpZiAobXggPiB3KSB7CiAgICAgICAgICAgIGludCBlaWQgPSBpZCAtIG47CiAgICAgICAgICAgIGxjdC5jdXQoZWRnZXNbZWlkXS51LCBpZCk7CiAgICAgICAgICAgIGxjdC5jdXQoZWRnZXNbZWlkXS52LCBpZCk7CiAgICAgICAgICAgIGxjdC5saW5rKHUsIGUpOwogICAgICAgICAgICBsY3QubGluayhlLCB2KTsKICAgICAgICAgICAgZWRnZXNbZWlkXSA9IGVkZ2VzW2ldOyAvLyBj4bqtcCBuaOG6rXQgY+G6oW5oIGLhu4sgdGhheQogICAgICAgIH0KICAgIH0KCiAgICBpZiAobGN0LmZpbmRSb290KHMpID09IGxjdC5maW5kUm9vdCh0XykpIHsKICAgICAgICBjb3V0IDw8IGxjdC5xdWVyeU1heChzLCB0XykuZmlyc3QgPDwgIlxuIjsKICAgIH0gZWxzZSB7CiAgICAgICAgY291dCA8PCAtMSA8PCAiXG4iOwogICAgfQp9CnJldHVybiAwOwoKCn0K