import java.io.*;
import java.util.Arrays;
public class Main{
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String [] s = br.readLine().split(” “);
int n = Integer.parseInt(s[0]);
int m = Integer.parseInt(s[1]);
int [][]matrix = new int [n+1][n+1];
int []dist = new int [n+1];
boolean [] isD = new boolean[n+1];
for(int i=1; i<=n; i) Arrays.fill(matrix[i], 100000);
for(int i=0;i<m;i){
s = br.readLine().split(” “);
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
int c = Integer.parseInt(s[2]);
matrix[a][b] = Math.min(c, matrix[a][b]);
//System.out.println(matrix[a][b]);
}
System.out.println(dijskral(matrix,dist,isD,n));
}
public static int dijskral(int[][]matrix,int []dist,boolean[] isD,int N){
Arrays.fill(dist,Integer.MAX_VALUE);
dist[1] = 0;
//每次循环确定一个
for(int i =1;i<=N;i){
int t =-1;
for(int j =1;j<=N;j){
if(!isD[j]&& (t==-1||dist[j]<dist[t])){
t = j;
}
}
isD[t] = true;
for(int k=1;k<=N;k++){
dist[k] = Math.min(dist[k],dist[t]+matrix[t][k]);
//System.out.println(dist[k]);
}
}
if(dist[N]==100000){return -1;}
return dist[N];
}
}