import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static int nextInt() throws IOException {
in.nextToken();
return (int) in.nval;
}
public static String next() throws IOException {
in.nextToken();
return (String) in.sval;
}
public static void main(String[] args) throws IOException{
while (in.nextToken()!=StreamTokenizer.TT_EOF) {
int n = (int)in.nval;
int m = nextInt();
if (n == 0 && m == 0) {
break;
}
int map[][] = new int[n + 1][n + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= n; j++) {
if (i != j) {
map[i][j] = Integer.MAX_VALUE;
}
}
}
for (int i = 0; i < m; i++) {
int a =nextInt();
int b =nextInt();
int v =nextInt();
if (v < map[a][b]) {
map[a][b] = v;
map[b][a] = v;
}
}
int bj[]=new int[n+1];
int dis[]=new int[n+1];
int min,u = 0;
map[1][0]=0;
map[0][1]=0;
bj[0]=1;
for(int i=0;i<=n;i++){
dis[i]=map[0][i];
}
for(int i=1;i<n+1;i++){
min=Integer.MAX_VALUE;
for(int j=0;j<=n;j++){
if(bj[j]==0&&dis[j]<min){
min=dis[j];
u=j;
}
}
bj[u]=1;
for(int j=0;j<=n;j++){
if(bj[j]==0&&map[u][j]<Integer.MAX_VALUE&&dis[j]>dis[u]+map[u][j]){
dis[j]=dis[u]+map[u][j];
}
}
}
System.out.println(dis[n]);
}
}
}