#include #include #include struct Edge { Edge(int dest, int we) { this->dest = dest; this->weight = we; } int dest, weight; }; const int MAXN = 54321; bool used[MAXN]; int count = 0, tin[MAXN], fup[MAXN]; void DfsBriges(int vertex, int parent, std::vector> &graph, int &answ) { used[vertex] = true; tin[vertex] = count; fup[vertex] = count++; for (Edge edge:graph[vertex]) { int dest = edge.dest; if (dest == parent) { continue; } if (used[dest]) { fup[vertex] = std::min(fup[vertex], fup[dest]); } else { DfsBriges(dest, vertex, graph, answ); fup[vertex] = std::min(fup[vertex], fup[dest]); if (fup[dest] > tin[vertex]) { answ = std::min(answ, edge.weight); } } } } int main() { int nn, mm; std::cin >> nn >> mm; std::vector> graph(nn + 1); for (int i = 0; i < mm; ++i) { int source, dest, weight; std::cin >> source >> dest >> weight; graph[source].push_back(Edge(dest, weight)); graph[dest].push_back(Edge(source, weight)); } int answ = 1e9; DfsBriges(1, -1, graph, answ); if (answ < 1e9) { std::cout << answ; } else { std::cout << -1; } }