#ifdef NACHIA #define _GLIBCXX_DEBUG #else // disable assert #define NDEBUG #endif #include #include #include #include #include using namespace std; using ll = long long; const ll INF = 1ll << 60; #define REP(i,n) for(ll i=0; i using V = vector; template void chmax(A& l, const B& r){ if(l < r) l = r; } template void chmin(A& l, const B& r){ if(r < l) l = r; } namespace nachia { struct DsuFast{ private: std::vector w; public: DsuFast(int n = 0) : w(n, -1) {} int leader(int u){ if(w[u] < 0) return u; return w[u] = leader(w[u]); } int operator[](int u){ return leader(u); } int merge(int u, int v){ u = leader(u); v = leader(v); if(u == v) return u; if(-w[u] < -w[v]) std::swap(u, v); w[u] += w[v]; w[v] = u; return u; } int size(int u){ return -w[leader(u)]; } bool same(int u, int v){ return leader(u) == leader(v); } }; } // namespace nachia void testcase(){ ll N, M; cin >> N >> M; V>> E(M); REP(i,M){ ll u,v,h; cin >> u >> v >> h; E[i] = { h, {u-1,v-1} }; } sort(E.rbegin(), E.rend()); auto dsu = nachia::DsuFast(N); for(auto [h,uv] : E){ auto [u,v] = uv; dsu.merge(u,v); if(dsu.same(0, N-1)){ cout << h << "\n"; return; } } cout << "NaN\n"; } int main(){ cin.tie(0)->sync_with_stdio(0); testcase(); return 0; }