import java.util.*;
public class Main {
    public static final int N = 50000 * 10000 + 1;
    static int[][] edges = new int[5001][5001];
    static int[] length = new int[5001];
    static boolean[] visited = new boolean[5001];

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int m = input.nextInt();

        int start;
        int end;
        int weight;
        for (int[] ints : edges) {
            Arrays.fill(ints, N);
        }

        for (int i = 0; i < m; i++) {
            start = input.nextInt();
            end = input.nextInt();
            weight = input.nextInt();
            edges[start][end] = weight;
            edges[end][start] = weight;
        }
        //定义数组表示到1号点到所有点的距离,默认除了到自己是0外,到其他点的距离都是N

        Arrays.fill(length, N);
        length[1] = 0;
        visited[1] = true;
        updateWay(1);
        for (int i = 1; i < 5001; i++) {
            start = getStart();
            if (start == n) {
                System.out.println(length[start]);
                break;
            }
            if (start != 0) {
                updateWay(start);
            }
        }
        if (!visited[n]) {
            System.out.println(-1);
        }

    }

    public static int getStart() {
        int min = N;
        int start = 0;
        for (int i = 1; i < 5001; i++) {
            if (!visited[i]) {
                //如果这个点还没设为已访问
                if (length[i] < min) {
                    //如果这个点的路径已被更新且更小
                    start = i;
                    min = length[i];
                }
            }
        }
        visited[start] = true;
        //System.out.println("目前可到达的未访问点," +start+ "距离最近");
        return start;
    }

    //遍历边集,找出各个与start直接相连的未访问点,将距离更新,并将其设为已访问
    public static void updateWay(int start) {
        for (int i = 1; i < 5001; i++) {
            if (!visited[i]) {
                if (length[i] > length[start] + edges[start][i]) {
                    //System.out.printf("%d与%d相连,距离从%d更新为%d\n",start,i,length[i],length[start] + edges[start][i]);
                    length[i] = length[start] + edges[start][i];

                }
            }
        }
    }
}