#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;
}