#include<bits/stdc++.h>
#define int long long
using namespace std;
int \
n,\
m,\
s=1,\
u,\
v,\
w,\
dis[10005],\
a\
;
bool \
vis\
[\
10005\
]\
;
struct \
xian\
{
int \
v\
;
int \
c\
;
}\
;
vector\
<xian> \
di\
[\
10005\
]\
;
void \
f\
(int s)\
{
queue\
<int> \
q\
;
q\
.\
push\
(\
s\
)\
;
vis[\
s\
]\
=\
1\
;
dis\
[\
s\
]\
=\
0\
;
while\
(\
q\
.\
size\
(\
)\
)\
{
a\
=\
q\
.\
front\
(\
)\
;
q\
.\
pop\
(\
)\
;
vis\
[\
a\
]\
=\
0\
;
for\
(\
int \
i\
=\
0\
;\
i\
<\
di\
[\
a\
]\
.\
size\
(\
)\
; \
i++\
)
if\
(\
di\
[\
a\
]\
[\
i\
]\
.\
c\
+\
dis\
[\
a\
]\
>\
dis\
[\
di\
[\
a\
]\
[\
i\
]\
.\
v\
]\
)\
{
dis\
[\
di\
[\
a\
]\
[\
i\
]\
.\
v\
]\
=\
di\
[\
a\
]\
[\
i\
]\
.\
c\
+\
dis\
[\
a\
]\
;
if\
(\
!\
vis\
[\
di\
[\
a\
]\
[\
i\
]\
.\
v\
]\
)\
{
q\
.\
push\
(\
di\
[\
a\
]\
[\
i\
]\
.\
v\
)\
;
vis\
[\
di\
[\
a\
]\
[\
i\
]\
.\
v\
]\
=\
1\
;
}
}
}
}
signed \
main\
(\
)\
{
cin\
>>\
n\
>>\
m\
;
for\
(\
int \
i\
=\
1\
; \
i\
<=\
m\
; \
i++\
)\
{
cin\
>>\
u\
>>\
v\
>>\
w;
di[u].push_back(xian{v,w})\
;
}
for\
(\
int\
i\
=\
1\
; \
i\
<=\
n\
; \
i++\
)
dis\
[\
i\
]\
=\
-INT_MAX;
f\
(\
s\
)\
;
cerr\
<<\
dis\
[\
n\
]\
<<\
" "\
;
if\
(\
dis\
[\
n\
]\
==\
-INT_MAX\
) cout\
<<\
-1\
;
else cout\
<<\
dis[n]\
;
return \
0\
;
}