#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN=1e3+7;
const ll maxn=1e9+7;
int n,m;
int s[MAXN][MAXN];
int d[MAXN];
int init()
{
for(int i=1;i<=MAXN;i++){
d[i]=maxn;
}
for(int i=1;i<MAXN;i++){
for(int j=1;j<MAXN;j++){
if(i==j)
s[i][j]=0;
else
s[i][j]=maxn;
}
}
}
void Dijkstra(){
priority_queue<pair<int,int>>q;
d[1]=0;
q.push(make_pair(-d[1],1));
while(!q.empty()){
int x=q.top().second;
q.pop();
for(int i=1;i<=m;i++){
if(d[i]>d[x]+s[x][i]){
d[i]=d[x]+s[x][i];
q.push(make_pair(-d[i],i));
}
}
}
}
int main()
{
while(cin>>m>>n){
if(m==0&&n==0){
break;
}
init();
int a,b,c;
for(int i=0;i<n;i++){
cin>>a>>b>>c;
s[a][b]=c;
s[b][a]=c;
}
Dijkstra();
cout<<d[m]<<endl;
}
}