#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