//hdu2544
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int N = 110;
const int MAX_INT = 0x3f3f3f3f;
int Dijkstra(int (*map)[110], int n);
int main()
{
int n, m;
int map[N][N];
while (scanf("%d %d", &n, &m) && n + m)
{
int i;
int a, b, c;
memset(map, MAX_INT, sizeof(map));
for (i=0; i<m; i++)
{
scanf("%d %d %d", &a, &b, &c);
map[a][b] = map[b][a] = c;
}
printf("%d", Dijkstra(map, n));
}
return 0;
}
int Dijkstra(int (*map)[110], int n)
{
int visitied[N] = {0};
int update[N];
int i, j;
int pos = 1;
for (i=2; i<=n; i++)
{
update[i] = map[pos][i];
}
visitied[pos] = 1;
for (j=1; j<n; j++)
{
int min = MAX_INT;
for (i=2; i<=n; i++)
{
if (!visitied[i] && min > update[i])
{
min = update[i];
pos = i;
}
}
visitied[pos] = 1;
for (i=2; i<=n; i++)
{
if (!visitied[i] && update[i] > update[pos] + map[pos][i])
{
update[i] = update[pos] + map[pos][i];
}
}
}
return update[n];
}