#include"stdio.h"
#include"string.h"
#define M 111
#define inf 999999999
int G[M][M],dis[M],use[M];
int n;
void dij(int s)
{
int i,k;
memset(use,0,sizeof(use));
for(i=1;i<=n;i++)
dis[i]=G[i][s];
dis[s]=0;
use[s]=1;
for(k=1;k<n;k++)
{
int min=inf,tep=-1;
for(i=1;i<=n;i++)
{
if(!use[i]&&dis[i]<min)
{
min=dis[i];
tep=i;
}
}
use[tep]++;
for(i=1;i<=n;i++)
{
if(!use[i]&&dis[i]>dis[tep]+G[i][tep])
{
dis[i]=dis[tep]+G[i][tep];
}
}
}
}
int main()
{
int m,i,j;
while(scanf("%d%d",&n,&m),m||n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
G[i][j]=G[j][i]=0;
else
G[i][j]=G[j][i]=inf;
}
while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
G[a][b]=G[b][a]=c;
}
dij(1);
printf("%d\n",dis[n]);
}
return 0;
}
#include"string.h"
#define M 111
#define inf 999999999
int G[M][M],dis[M],use[M];
int n;
void dij(int s)
{
int i,k;
memset(use,0,sizeof(use));
for(i=1;i<=n;i++)
dis[i]=G[i][s];
dis[s]=0;
use[s]=1;
for(k=1;k<n;k++)
{
int min=inf,tep=-1;
for(i=1;i<=n;i++)
{
if(!use[i]&&dis[i]<min)
{
min=dis[i];
tep=i;
}
}
use[tep]++;
for(i=1;i<=n;i++)
{
if(!use[i]&&dis[i]>dis[tep]+G[i][tep])
{
dis[i]=dis[tep]+G[i][tep];
}
}
}
}
int main()
{
int m,i,j;
while(scanf("%d%d",&n,&m),m||n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
G[i][j]=G[j][i]=0;
else
G[i][j]=G[j][i]=inf;
}
while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
G[a][b]=G[b][a]=c;
}
dij(1);
printf("%d\n",dis[n]);
}
return 0;
}