#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int cost[105][105];
int n;
int dis[105];
bool hash[105];
const int MAX = 0x7fffffff;
void Dijkstra()
{
int i, j, k;
memset(hash, false, sizeof(hash));
hash[1] = true;
for(i = 2; i <= n; i++)
{
int s = MAX;
int t = 1;
for(j = 2; j <= n; j++)
{
if(dis[j] < s && !hash[j])//这里忘记了hash
{
s = dis[j];
t = j;
}
}
for(k = 2; k <= n; k++)
{
if(!hash[k] && cost[t][k] != MAX && dis[k] > dis[t] + cost[t][k])
{
dis[k] = dis[t] + cost[t][k];
}
}
hash[t] = true;
}
cout<<dis[n]<<endl;
}
int main()
{
int i, j, m;
while(scanf("%d %d", &n, &m) != EOF)
{
if(n == 0 && m == 0)
continue;
for(i = 0; i <= n; i++)
for(j = 0; j <= n; j++)
{
if(i == j)
cost[i][j] = 0;
else
cost[i][j] = MAX;
}
int a, b, t;
for(i = 0; i < m; i++)
{
scanf("%d %d %d", &a, &b, &t);
cost[a][b] = t;
cost[b][a] = t;
}
for(i = 1; i <= n; i++)
{
dis[i] = cost[1][i];
}
Dijkstra();
}
}