#include <iostream> using namespace std; const int Max=99999999; int map[105][105]; int d[105]; int middist; bool s[105]; void dijkstra(int n,int m) { for(int i=1;i<=n;i++) { d[i]=map[1][i]; s[i]=false; } int u=1; d[u]=0; s[u]=true; for(int i=1;i<=n;i++) { middist=Max; for(int j=1;j<=n;j++) { if((!s[j])&&d[j]<middist) { u=j; middist=d[j]; } } s[u]=true; for(int j=1;j<=n;j++) { if((!s[j])&&map[u][j]<Max) { if(d[u]+map[u][j]<d[j]) { d[j]=d[u]+map[u][j]; } } } } } int main() { int N,M; while(cin>>N>>M&&N!=0&&M!=0) { for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) { map[i][j]=Max; } for(int i=1;i<=M;i++) { int p,q,v; cin>>p>>q>>v; map[p][q]=map[q][p]=v; } dijkstra(N,M); cout<<d[N]<<endl; } return 0; }