#include<bits/stdc++.h>usingnamespace std;int a[510][510], n, m, d[510];bool v[510];constint N =1000010;voiddijkstra(){
d[1]=0;for(int i =1; i < n; i++){// n - 1次int x =0;for(int j =1; j <= n; j++)// 找到 d值(距离1号最近的) 最小的if(!v[j]&&(x ==0|| d[j]< d[x])) x = j;
v[x]=1;for(int y =1; y <= n; y++)// 用 最小的点 来更新 d值
d[y]=min(d[y], d[x]+ a[x][y]);}}intmain(){memset(a,'0',sizeof(a));memset(d,1,sizeof(d));// 距离 1号 的距离memset(v,0,sizeof(v));// 标记节点for(int i =1; i <= n; i++)
a[i][i]=0;
cin >> n >> m;for(int i =1; i <= m; i ++){int x, y, z;
cin >> x >> y >> z;
a[x][y]=min(a[x][y], z);}dijkstra();if(d[n]==16843009)//这里数组初始化用memset 写 1 时赋的值是这个数。
cout <<"-1";else
cout << d[n]<< endl;return0;}