#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Maxn = 1000000;
int f[105][105];
int n,m;
void floyd()
{
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i!=j && f[i][j]>f[i][k]+f[k][j])
f[i][j] = f[i][k]+f[k][j]; //3个for循环
}
int main()
{
while(cin >> n >> m && n||m)
{
int a, b, c;
for(int i = 1; i < 105; i++)
{
for(int j = 1; j < 105; j++)
if(j != i) f[i][j] = f[j][i] = Maxn;
else f[i][j] = 0;
}
while(m--)
{
cin >> a >> b >> c;
if(f[a][b] > c) f[a][b] = f[b][a] = c;
}
floyd();
cout << f[1][n] << endl;
}
return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Maxn = 1000000;
int f[105][105];
int n,m;
void floyd()
{
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i!=j && f[i][j]>f[i][k]+f[k][j])
f[i][j] = f[i][k]+f[k][j]; //3个for循环
}
int main()
{
while(cin >> n >> m && n||m)
{
int a, b, c;
for(int i = 1; i < 105; i++)
{
for(int j = 1; j < 105; j++)
if(j != i) f[i][j] = f[j][i] = Maxn;
else f[i][j] = 0;
}
while(m--)
{
cin >> a >> b >> c;
if(f[a][b] > c) f[a][b] = f[b][a] = c;
}
floyd();
cout << f[1][n] << endl;
}
return 0;
}