#include <limits.h>
#include <stdio.h>
#include <malloc.h>
#define MAX 5000
int main() {
    // 好坑呀,这里一定要MAX
    int n;
    int m;
    scanf("%d", &n);
    scanf("%d", &m);
    int g[MAX + 1][MAX + 1];
    for (int i = 0; i <=MAX; i++) {
        for (int j = 0; j <=MAX + 1; j++) {
            g[i][j] = INT_MAX;
        }
    }
    
    for (int i = 0; i < m; i++) {
        int tmp1;
        int tmp2;
        int tmp3;
        scanf("%d", &tmp1);
        scanf("%d", &tmp2);
        scanf("%d", &tmp3);
        g[tmp1][tmp2] = tmp3;
        g[tmp2][tmp1] = tmp3;
    }

    // for (int i = 0; i < n + 1; i++) {
    //     for (int j = 0; j < n + 1; j++) {
    //         printf("g[%d][%d]=%d ", i, j, g[i][j]);
    //     }
    //     printf("\n");
    // }

    int dist[MAX + 1];
    for (int i = 0; i <=MAX; i++) {
        dist[i] = 50000;
    }
// for(int i = 1;i<=n;i++){
//     printf("%d ",dist[i]);
// }
    int flag[MAX + 1];
    for (int i = 0; i <=MAX; i++) {
        flag[i] = 0;
    }

    for (int i = 1; i <= MAX; i++) {
      dist[i] = g[1][i];
    }
    dist[1] = 0;
    flag[1] = 1;
    for (int i = 2; i <= n; i++) {
        dist[i] = dist[i] < g[1][i] ? dist[i] : g[1][i];
    }

    for (int i = 2; i <= n; i++) {
        int tmp =INT_MAX;
        int t = 1;
        for (int j = 1; j <= MAX; j++) {
            if (flag[j] == 0 && dist[j] < tmp) {
                tmp = dist[j];
                t = j;
            }
        }
    if(t!=1){
            flag[t] = 1;
    }
        for (int j = 1; j <= MAX; j++) {
            if (flag[j] == 0 && g[t][j] != INT_MAX) {
                dist[j] = dist[j] < g[t][j] + dist[t] ? dist[j] : g[t][j] + dist[t];

            }
        }
    }
// for(int i = 1;i<=n;i++){
//     printf("%d ",dist[i]);
// }
if(dist[n]!=INT_MAX){
     printf("%d ",dist[n]);
}else {
    printf("-1" );
}
    return 0;
}