#include using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using u128 = unsigned __int128; using i128 = __int128; using pii = std::pair; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N, M; std::cin >> N >> M; std::vector> adj(N); for (int i = 0; i < M; i++) { int u, v, d; std::cin >> u >> v >> d; u--; v--; adj[u].push_back({v, d}); adj[v].push_back({u, d}); } std::vector dist(N, -1); auto check = [&](int mid) -> bool { std::queue q; q.push(0); dist[0] = 0; while (!q.empty()) { int u = q.front(); q.pop(); for (auto [v, w] : adj[u]) { if (dist[v] == -1 && mid <= w) { dist[v] = dist[u] + 1; q.push(v); } } } return dist[N-1] != -1; }; int lo = 0, hi = 2e9; while (lo + 1 < hi) { int m = lo + (hi - lo) / 2; if (check(m)) lo = m; else hi = m; dist.assign(N, -1); } std::cout << lo << ' '; check(lo); std::cout << dist[N-1] << '\n'; return 0; }