#include <bits/stdc++.h>
#define pii pair<int,int>
#define MAXN 100

const int INF = 1e9;

using namespace std;

vector<pii> grafo[MAXN];

int dist[MAXN];

void bfs01(int s){
    deque<pii> q;
    q.push_front({0,s});
    dist[s] = 0;
    while(!q.empty()){
        pii e = q.front();
        int v = e.second;
        q.pop_front();
        for(pii viz : grafo[v]){
            int u = viz.second;
            int w = viz.first;
            if(dist[v]+w < dist[u]){
                dist[u] = dist[v]+w;
                if(w == 0){
                    q.push_front(viz);
                }
                else{
                    q.push_back(viz);
                }
            }
        }
    }
}

int main(){
    int n, m; scanf("%d %d", &n, &m);
    
    for(int i = 0; i < m; i++){
        int a, b, c; scanf("%d %d %d", &a, &b, &c); //aresta que liga a em b com custo c
        grafo[a].push_back({c, b});
        grafo[b].push_back({c, a});
    }
    
    for(int i = 0; i <= n; i++){
        dist[i] = INF;
    }
    
    bfs01(1);
    
    printf("%d", dist[n]);
}