#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
const int NAX = 200002;
const int MAX = 1e9+2;
vector<vector<int> > adj(NAX), adj_rev(NAX);
vector<bool> used(NAX);
vector<int> order, component;
vector<int> root_nodes;
vector<int> roots(NAX);
vector<vector<int> > adj_scc(NAX);
void dfs1(int v) {
used[v] = true;
for (auto u : adj[v])
if (!used[u])
dfs1(u);
order.push_back(v);
}
void dfs2(int v) {
used[v] = true;
component.push_back(v);
for (auto u : adj_rev[v])
if (!used[u])
dfs2(u);
}
bool cando(int mid, vector<tuple<int,int,int> > &edges, int n){
order.clear();
root_nodes.clear();
for (int i=1; i<=n; i++) adj[i].clear(), adj_rev[i].clear(), adj_scc[i].clear(); // roots[i]=0
for (int i=0; i<edges.size(); i++){
int u=get<0>(edges[i]);
int v=get<1>(edges[i]);
int w=get<2>(edges[i]);
adj[u].push_back(v);
adj_rev[v].push_back(u);
if (w<=mid){
adj[v].push_back(u);
adj_rev[u].push_back(v);
}
}
for (int i=1; i<=n; i++) used[i]=false;
for (int i=1; i<=n; i++)
if (!used[i])
dfs1(i);
for (int i=1; i<=n; i++) used[i]=false;
reverse(order.begin(), order.end());
for (auto v : order)
if (!used[v]) {
dfs2 (v);
int root = component.front();
for (auto u : component) roots[u] = root;
root_nodes.push_back(root);
component.clear();
}
vector<int> indeg(n+1,-1);
for (int i=0; i<root_nodes.size(); i++) indeg[root_nodes[i]]=0;
for (int v = 1; v <= n; v++)
for (auto u : adj[v]) {
int root_v = roots[v],
root_u = roots[u];
if (root_u != root_v){
adj_scc[root_v].push_back(root_u);
indeg[root_u]++;
}
}
queue<int> bfs;
for (int i=1; i<=n; i++) used[i]=false;
for (int i=1; i<=n; i++){
if (indeg[i]==0){
bfs.push(i);
used[i]=true;
}
}
if (bfs.size()>1){
//cout<<123<<endl;
return false;
}
while(!bfs.empty()){
int u = bfs.front();
bfs.pop();
for (int i=0; i<adj_scc[u].size(); i++){
int v=adj_scc[u][i];
if (!used[v]){
used[v]=true;
bfs.push(v);
}
}
}
bool ok=true;
for (int i=0; i<root_nodes.size(); i++){
if (!used[root_nodes[i]]) ok=false;
}
return ok;
}
void solve(){
int n; cin>>n;
int m; cin>>m;
vector<tuple<int,int,int> > edges;
for (int i=0; i<m; i++){
int u,v,w; cin>>u>>v>>w;
edges.push_back(make_tuple(u,v,w));
}
int lo=MAX, hi=-1;
while(lo-1!=hi){
int mid = (lo+hi)/2;
if (cando(mid,edges,n)) lo=mid;
else hi=mid;
}
if (lo!=MAX) cout<<lo<<'\n';
else cout<<-1<<'\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t; cin>>t;
while(t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBpaTsKCmNvbnN0IGludCBOQVggPSAyMDAwMDI7CmNvbnN0IGludCBNQVggPSAxZTkrMjsKCnZlY3Rvcjx2ZWN0b3I8aW50PiA+IGFkaihOQVgpLCBhZGpfcmV2KE5BWCk7CnZlY3Rvcjxib29sPiB1c2VkKE5BWCk7CnZlY3RvcjxpbnQ+IG9yZGVyLCBjb21wb25lbnQ7CnZlY3RvcjxpbnQ+IHJvb3Rfbm9kZXM7CnZlY3RvcjxpbnQ+IHJvb3RzKE5BWCk7CnZlY3Rvcjx2ZWN0b3I8aW50PiA+IGFkal9zY2MoTkFYKTsKCnZvaWQgZGZzMShpbnQgdikgewogICAgdXNlZFt2XSA9IHRydWU7CiAgICBmb3IgKGF1dG8gdSA6IGFkalt2XSkKICAgICAgICBpZiAoIXVzZWRbdV0pCiAgICAgICAgICAgIGRmczEodSk7CiAKICAgIG9yZGVyLnB1c2hfYmFjayh2KTsKfQogCnZvaWQgZGZzMihpbnQgdikgewogICAgdXNlZFt2XSA9IHRydWU7CiAgICBjb21wb25lbnQucHVzaF9iYWNrKHYpOwogCiAgICBmb3IgKGF1dG8gdSA6IGFkal9yZXZbdl0pCiAgICAgICAgaWYgKCF1c2VkW3VdKQogICAgICAgICAgICBkZnMyKHUpOwp9Cgpib29sIGNhbmRvKGludCBtaWQsIHZlY3Rvcjx0dXBsZTxpbnQsaW50LGludD4gPiAmZWRnZXMsIGludCBuKXsKCW9yZGVyLmNsZWFyKCk7Cglyb290X25vZGVzLmNsZWFyKCk7Cglmb3IgKGludCBpPTE7IGk8PW47IGkrKykgYWRqW2ldLmNsZWFyKCksIGFkal9yZXZbaV0uY2xlYXIoKSwgYWRqX3NjY1tpXS5jbGVhcigpOyAvLyByb290c1tpXT0wCgkKCWZvciAoaW50IGk9MDsgaTxlZGdlcy5zaXplKCk7IGkrKyl7CgkJaW50IHU9Z2V0PDA+KGVkZ2VzW2ldKTsKCQlpbnQgdj1nZXQ8MT4oZWRnZXNbaV0pOwoJCWludCB3PWdldDwyPihlZGdlc1tpXSk7CgkJYWRqW3VdLnB1c2hfYmFjayh2KTsKCQlhZGpfcmV2W3ZdLnB1c2hfYmFjayh1KTsKCQlpZiAodzw9bWlkKXsKCQkJYWRqW3ZdLnB1c2hfYmFjayh1KTsKCQkJYWRqX3Jldlt1XS5wdXNoX2JhY2sodik7CgkJfQoJfQoJCglmb3IgKGludCBpPTE7IGk8PW47IGkrKykgdXNlZFtpXT1mYWxzZTsKCWZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQogICAgICAgIGlmICghdXNlZFtpXSkKICAgICAgICAgICAgZGZzMShpKTsKICAgIAogICAgZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspIHVzZWRbaV09ZmFsc2U7CiAgICByZXZlcnNlKG9yZGVyLmJlZ2luKCksIG9yZGVyLmVuZCgpKTsKICAgIAogICAgZm9yIChhdXRvIHYgOiBvcmRlcikKICAgICAgICBpZiAoIXVzZWRbdl0pIHsKICAgICAgICAgICAgZGZzMiAodik7CiAKCQkJaW50IHJvb3QgPSBjb21wb25lbnQuZnJvbnQoKTsKCQkJZm9yIChhdXRvIHUgOiBjb21wb25lbnQpIHJvb3RzW3VdID0gcm9vdDsKCQkJcm9vdF9ub2Rlcy5wdXNoX2JhY2socm9vdCk7CiAKICAgICAgICAgICAgY29tcG9uZW50LmNsZWFyKCk7CiAgICAgICAgfQogICAgCiAgICB2ZWN0b3I8aW50PiBpbmRlZyhuKzEsLTEpOwogICAgZm9yIChpbnQgaT0wOyBpPHJvb3Rfbm9kZXMuc2l6ZSgpOyBpKyspIGluZGVnW3Jvb3Rfbm9kZXNbaV1dPTA7CiAgICBmb3IgKGludCB2ID0gMTsgdiA8PSBuOyB2KyspCiAgICBmb3IgKGF1dG8gdSA6IGFkalt2XSkgewogICAgICAgIGludCByb290X3YgPSByb290c1t2XSwKICAgICAgICAgICAgcm9vdF91ID0gcm9vdHNbdV07CgogICAgICAgIGlmIChyb290X3UgIT0gcm9vdF92KXsKICAgICAgICAJYWRqX3NjY1tyb290X3ZdLnB1c2hfYmFjayhyb290X3UpOwogICAgICAgIAlpbmRlZ1tyb290X3VdKys7CiAgICAgICAgfQogICAgfQogICAgCiAgICAKICAgIHF1ZXVlPGludD4gYmZzOwogICAgZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspIHVzZWRbaV09ZmFsc2U7CiAgICBmb3IgKGludCBpPTE7IGk8PW47IGkrKyl7CiAgICAJaWYgKGluZGVnW2ldPT0wKXsKICAgIAkJYmZzLnB1c2goaSk7CiAgICAJCXVzZWRbaV09dHJ1ZTsKICAgIAl9CiAgICB9CiAgICBpZiAoYmZzLnNpemUoKT4xKXsKICAgIAkvL2NvdXQ8PDEyMzw8ZW5kbDsKICAgIAlyZXR1cm4gZmFsc2U7CiAgICB9CiAgICB3aGlsZSghYmZzLmVtcHR5KCkpewogICAgCWludCB1ID0gYmZzLmZyb250KCk7CiAgICAJYmZzLnBvcCgpOwogICAgCWZvciAoaW50IGk9MDsgaTxhZGpfc2NjW3VdLnNpemUoKTsgaSsrKXsKICAgIAkJaW50IHY9YWRqX3NjY1t1XVtpXTsKICAgIAkJaWYgKCF1c2VkW3ZdKXsKICAgIAkJCXVzZWRbdl09dHJ1ZTsKICAgIAkJCWJmcy5wdXNoKHYpOwogICAgCQl9CiAgICAJfQogICAgfQogICAgYm9vbCBvaz10cnVlOwogICAgZm9yIChpbnQgaT0wOyBpPHJvb3Rfbm9kZXMuc2l6ZSgpOyBpKyspewogICAgCWlmICghdXNlZFtyb290X25vZGVzW2ldXSkgb2s9ZmFsc2U7CiAgICB9CiAgICByZXR1cm4gb2s7Cn0KCnZvaWQgc29sdmUoKXsKCWludCBuOyBjaW4+Pm47CglpbnQgbTsgY2luPj5tOwoJdmVjdG9yPHR1cGxlPGludCxpbnQsaW50PiA+IGVkZ2VzOwoJZm9yIChpbnQgaT0wOyBpPG07IGkrKyl7CgkJaW50IHUsdix3OyBjaW4+PnU+PnY+Pnc7CgkJZWRnZXMucHVzaF9iYWNrKG1ha2VfdHVwbGUodSx2LHcpKTsKCX0KCWludCBsbz1NQVgsIGhpPS0xOwoJd2hpbGUobG8tMSE9aGkpewoJCWludCBtaWQgPSAobG8raGkpLzI7CgkJaWYgKGNhbmRvKG1pZCxlZGdlcyxuKSkgbG89bWlkOwoJCWVsc2UgaGk9bWlkOwoJfQoJaWYgKGxvIT1NQVgpIGNvdXQ8PGxvPDwnXG4nOwoJZWxzZSBjb3V0PDwtMTw8J1xuJzsKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7CgkKCWludCB0OyBjaW4+PnQ7Cgl3aGlsZSh0LS0pIHNvbHZlKCk7CgkKCXJldHVybiAwOwp9
NAoyIDEKMSAyIDMKNSA0CjEgMiAxMAoyIDMgMTAKMyAxIDEwCjQgNSAxMAo0IDUKMSAyIDEwMDAwCjIgMyAyMDAwMAoxIDMgMzAwMDAKNCAyIDUwMAo0IDMgMjAKNCA1CjEgMiAxMDAwMAoyIDMgMjAwMDAKMSAzIDMwMDAwCjQgMiA1CjQgMyAyMAo=
4
2 1
1 2 3
5 4
1 2 10
2 3 10
3 1 10
4 5 10
4 5
1 2 10000
2 3 20000
1 3 30000
4 2 500
4 3 20
4 5
1 2 10000
2 3 20000
1 3 30000
4 2 5
4 3 20