#include <stdio.h>
#define N 101
#define MAX 10000000
/**
1.弗洛伊德算法的时间复杂度是O(N^3),一般节点是<=200
2.弗洛伊德算法将求得所有节点之间的最短路径
*/
int ans[N][N];
int main()
{
int n, m;
while(scanf("%d%d", &n, &m) != EOF)
{
if(n == 0)
break;
for(int i = 1; i < N; i++)
for(int j = 1; j < N; j++)
{
ans[i][j] = MAX;
ans[i][i] = 0;
}
int a, b, c;
for(int i = 1; i <= m; i++)
{
scanf("%d%d%d", &a, &b, &c);
ans[a][b] = c;
ans[b][a] = c;
}
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
{
if(ans[i][k] == MAX || ans[k][j] == MAX)
continue;
if(ans[i][j] == MAX || ans[i][k] + ans[k][j] < ans[i][j])
ans[i][j] = ans[i][k] + ans[k][j];
}
printf("%d\n", ans[1][n]);
}
return 0;
}