#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define MAX 100000
using namespace std;
int n,m ,i,j;
int map[1001][1001];
int d[1001];
void dijk()
{
int fg[1001]= {0};
memset(fg,0,sizeof(fg));
for(i=1; i<=n; i++) {
d[i]=map[1][i];
}fg[1]=1;d[1]=0;
for(i=1; i<n; i++) {
int findmin=MAX,pos=1;
for(j=1; j<=n; j++) {
if(!fg[j]&&(d[j]<findmin)) {
findmin=d[j];
pos=j;
}
}
fg[pos]=1;
for(j=1; j<=n; j++) {
if(!fg[j]) {
d[j]=min(d[j],d[pos]+map[pos][j]);
}
}
}
}
int main()
{
int a,b,c;
while(scanf("%d %d",&n,&m),n||m) {
for(i=0; i<=1000; i++) {
for(j=0; j<=i; j++) {
map[i][j]=map[j][i]=MAX;
}
}
for(i=1; i<=m; i++) {
scanf("%d %d %d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
dijk();
printf("%d\n",d[n]);
}
return 0;
}