01.#include <set>
02.#include <map>
03.#include <stack>
04.#include <cmath>
05.#include <queue>
06.#include <cstdio>
07.#include <string>
08.#include <vector>
09.#include <iomanip>
10.#include <cstring>
11.#include <iostream>
12.#include <algorithm>
13.#define Max 2505
14.#define FI first
15.#define SE second
16.#define ll long long
17.#define PI acos(-1.0)
18.#define inf 0x3fffffff
19.#define LL(x) ( x 《 1 )
20.#define bug puts("here")
21.#define PII pair<int,int>
22.#define RR(x) ( x 《 1 | 1 )
23.#define mp(a,b) make_pair(a,b)
24.#define mem(a,b) memset(a,b,sizeof(a))
25.#define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )
26.
27.using namespace std;
28.
29.#define M 999999
30.#define N 111111
31.int n , m ;
32.struct kdq {
33. int e , l , next ;
34.} ed[M] ;
35.int head[N] , num ;
36.void init() {
37. mem(head ,-1) ;
38. num = 0 ;
39.}
40.void add(int s ,int e ,int l) {
41. ed[num].e = e ;
42. ed[num].l = l ;
43. ed[num].next = head[s] ;
44. head[s] = num ++ ;
45.}
46.int dis[N] , cnt[N] ;
47.bool vis[N] ;
48.queue<int>qe ;
49.int spfa() {
50. while(!qe.empty())qe.pop() ;
51. for (int i = 0 ; i <= n ; i ++ )dis[i] = inf ,cnt[i] = 0 ;
52. dis = 0 ;
53. mem(vis ,0) ;
54. qe.push(1) ;
55. vis = 1 ;
56. while(!qe.empty()) {
57. int tp = qe.front() ;
58. qe.pop() ;
59. vis[tp] = 0 ;
60. if(cnt[tp] > n)return -1 ;
62. int e = ed[i].e ;
63. int l = ed[i].l ;
64. if(dis[e] > dis[tp] + l) {
65. dis[e] = dis[tp] + l ;
66. if(!vis[e]) {
67. vis[e] = 1 ;
68. qe.push(e) ;
69. cnt[e] ++ ;
70. }
71. }
72. }
73. }
74. return dis[n] - dis ;
75.}
76.
77.struct DIJ {
78. int e , l ;
79. DIJ() {}
80. DIJ(int ee , int lx):e(ee) , l(lx) {}
81. bool operator < (const DIJ &fk )const {
82. return l > fk.l ;
83. }
84.} ;
85.//queue<DIJ>q ;
86.int dij() {
87. priority_queue<DIJ>q ;
88. for (int i = 1 ; i <= n ; i ++ )dis[i] = inf ;
89. mem(vis ,0) ;
90. dis = 0 ;
91. q.push((DIJ) {
92. 1 , 0
93. }) ;
94. while(!q.empty()) {
95. DIJ tp = q.top() ;
96. q.pop() ;
97. if(vis[tp.e])continue ;
98. vis[tp.e] = 1 ;
99. for (int i = head[tp.e] ; ~i ; i = ed[i].next ) {
100. int e = ed[i].e ;
101. int l = ed[i].l ;
102. if(dis[e] > dis[tp.e] + l ) {
103. dis[e] = dis[tp.e] + l ;
104. q.push(DIJ(e , dis[e])) ;
105. }
106. }
107. }
108. return dis[n] ;
109.}
110.int main() {
111. while(cin 》 n 》 m ) {
112. int a , b , c ;
113. init() ;
114. for (int i = 0 ; i < m ; i ++ ) {
115. scanf("%d%d%d",&a,&b,&c) ;
116. add(a , b , c) ;
117. }
118. printf("%d\n",dij()) ;
119. }
120. return 0 ;
121.}