#include<iostream> #include<queue> #include<cstring> #define INF 0x3f3f3f3f using namespace std; int main() { int n,m,x,y,val,now,map[105][105],dis[105],vis[105]; while(cin>>n>>m) { queue<int>q; if(n==0&&m==0) break; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(i==j) map[i][j]=0; else map[i][j]=INF; } } for(int i=0;i<m;i++) { cin>>x>>y>>val; map[x-1][y-1]=val; map[y-1][x-1]=val; } for(int i=1;i<n;i++) { dis[i]=INF; } dis[0]=0; vis[0]=1; q.push(0); while(!q.empty()) { now=q.front(); q.pop(); vis[now]=0; for(int i=1;i<n;i++) { if(dis[i]>dis[now]+map[now][i]) { dis[i]=dis[now]+map[now][i]; if(vis[i]==0) { q.push(i); vis[i]=1; } } } } cout<<dis[n-1]<<endl; } }