#include<bits/stdc++.h>
using namespace std;
const int N = 100+5, inf = 0x3f3f3f3f;
typedef pair<int, int> PII;
int n, m;
int g[N][N];
int dis[N];
bool vis[N];
void floyd(){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
for(int k=1; k<=n; k++){
g[j][k] = min(g[j][k], g[j][i]+g[i][k]);
}
}
}
}
void spfa(){
memset(dis, 0x3f, sizeof dis);
dis[1] = 0;
queue<int> q;
q.push(1), vis[1] = true;
while(q.size()){
int t = q.front();
q.pop();
for(int i=1; i<=n; i++){
if(dis[i]>dis[t]+g[t][i]){
dis[i] = dis[t]+g[t][i];
if(!vis[i]){
q.push(i);
vis[i] = true;
}
}
}
vis[t] = false;
}
}
void dijkstra(){
memset(dis, 0x3f, sizeof dis);
dis[1] = 0;
for(int i=0; i<n; i++){
int t = -1;
for(int j=1; j<=n; j++){
if(!vis[j] && (t==-1 || dis[t]>dis[j])) t = j;
}
for(int j=1; j<=n; j++){
if(!vis[j]){
dis[j] = min(dis[j], dis[t]+g[t][j]);
}
}
vis[t] = true;
}
}
void h_dijkstra(){
memset(dis, 0x3f, sizeof dis);
dis[1] = 0;
priority_queue<PII, vector<PII>, greater<PII> > q;
q.push({0, 1});
while(q.size()){
PII t = q.top();
q.pop();
int v = t.second;
if(vis[v]) continue;
vis[v] = true;
for(int i=1; i<=n; i++){
if(dis[i]>dis[v]+g[v][i]){
dis[i] = dis[v]+g[v][i];
q.push({dis[i], i});
}
}
}
}
int main(){
scanf("%d%d", &n, &m);
memset(g, 0x3f, sizeof g);
int a, b, c;
for(int i=0; i<m; i++){
scanf("%d%d%d", &a, &b, &c);
g[a][b] = g[b][a] = min(g[a][b], c);
}
//floyd();
//spfa();
//dijkstra();
h_dijkstra();
int ans = 0;
//for(int i=2; i<=n; i++) ans = max(ans, g[1][i]);
for(int i=2; i<=n; i++) ans = max(ans, dis[i]);
if(ans==inf) puts("-1");
else cout<< ans<< endl;
return 0;
}