#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
typedef pair<int, int> pii;
const int INF = INT_MAX;
vector<vector<pii>> graph;
int findHighestSafeRoute(int n) {
vector<int> dist(n + 1, INF);
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push(make_pair(0, 1));
dist[1] = 0;
while (!pq.empty()) {
int u = pq.top().second;
int danger = pq.top().first;
pq.pop();
if (danger > dist[u]) {
continue;
}
for (pii edge : graph[u]) {
int v = edge.first;
int roadDanger = edge.second;
if (dist[u] + roadDanger < dist[v]) {
dist[v] = dist[u] + roadDanger;
pq.push(make_pair(dist[v], v));
}
}
}
int highestDanger = 0;
for (int i = 1; i <= n; i++) {
highestDanger = max(highestDanger, dist[i]);
}
return highestDanger;
}
int main() {
int n, m;
cin >> n >> m;
graph.resize(n + 1);
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
graph[a].push_back(make_pair(b, c));
graph[b].push_back(make_pair(a, c));
}
int highestDanger = findHighestSafeRoute(n);
cout << highestDanger << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjbGltaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwoKY29uc3QgaW50IElORiA9IElOVF9NQVg7Cgp2ZWN0b3I8dmVjdG9yPHBpaT4+IGdyYXBoOwoKaW50IGZpbmRIaWdoZXN0U2FmZVJvdXRlKGludCBuKSB7CiAgICB2ZWN0b3I8aW50PiBkaXN0KG4gKyAxLCBJTkYpOwogICAgcHJpb3JpdHlfcXVldWU8cGlpLCB2ZWN0b3I8cGlpPiwgZ3JlYXRlcjxwaWk+PiBwcTsKCiAgICBwcS5wdXNoKG1ha2VfcGFpcigwLCAxKSk7CiAgICBkaXN0WzFdID0gMDsKCiAgICB3aGlsZSAoIXBxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdSA9IHBxLnRvcCgpLnNlY29uZDsKICAgICAgICBpbnQgZGFuZ2VyID0gcHEudG9wKCkuZmlyc3Q7CiAgICAgICAgcHEucG9wKCk7CgogICAgICAgIGlmIChkYW5nZXIgPiBkaXN0W3VdKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgZm9yIChwaWkgZWRnZSA6IGdyYXBoW3VdKSB7CiAgICAgICAgICAgIGludCB2ID0gZWRnZS5maXJzdDsKICAgICAgICAgICAgaW50IHJvYWREYW5nZXIgPSBlZGdlLnNlY29uZDsKCiAgICAgICAgICAgIGlmIChkaXN0W3VdICsgcm9hZERhbmdlciA8IGRpc3Rbdl0pIHsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgcm9hZERhbmdlcjsKICAgICAgICAgICAgICAgIHBxLnB1c2gobWFrZV9wYWlyKGRpc3Rbdl0sIHYpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpbnQgaGlnaGVzdERhbmdlciA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBoaWdoZXN0RGFuZ2VyID0gbWF4KGhpZ2hlc3REYW5nZXIsIGRpc3RbaV0pOwogICAgfQoKICAgIHJldHVybiBoaWdoZXN0RGFuZ2VyOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBuLCBtOwogICAgY2luID4+IG4gPj4gbTsKCiAgICBncmFwaC5yZXNpemUobiArIDEpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgaW50IGEsIGIsIGM7CiAgICAgICAgY2luID4+IGEgPj4gYiA+PiBjOwogICAgICAgIGdyYXBoW2FdLnB1c2hfYmFjayhtYWtlX3BhaXIoYiwgYykpOwogICAgICAgIGdyYXBoW2JdLnB1c2hfYmFjayhtYWtlX3BhaXIoYSwgYykpOwogICAgfQoKICAgIGludCBoaWdoZXN0RGFuZ2VyID0gZmluZEhpZ2hlc3RTYWZlUm91dGUobik7CiAgICBjb3V0IDw8IGhpZ2hlc3REYW5nZXIgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=