#include<bits/stdc++.h>
#define int long long
using namespace std;
priority_queue<pair<int, int>, vector<pair<int, int> > > heap;
int k,t[50005],h[1555],r[50005],u[50005],d[1555],p[1555],s[1555];
inline int read(){
int x=0,m=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') m=-1;
ch=getchar();
}
while(isdigit(ch)){
x=x*10+ch-48;
ch=getchar();
}
return x*m;
}
inline void write(int x){
if(x < 0){
putchar('-');
write(-x);
return;
}
if(x>=10) write(x/10);
putchar(x%10+'0');
}
signed main(){
int n=read(),m=read();
for (int i=1;i<=m;i++){
int x=read(),y=read(),z=read();
k++;
t[k]=h[x];
h[x]=k;
r[k]=y;
u[k]=z+100005;
}
d[1]=0;
p[1]=true;
s[1]=0;
heap.push(make_pair(0,1));
while(!heap.empty()){
pair<int, int> Max=heap.top();
heap.pop();
int v=Max.second;
if(d[v]!=Max.first) continue;
int x=h[v];
while(x){
if(d[r[x]]<d[v]+u[x]){
d[r[x]]=d[v]+u[x];
s[r[x]]=s[v]+1;
p[r[x]]=true;
heap.push(make_pair(d[r[x]],r[x]));
}
x=t[x];
}
}
if (!p[n]) write(-1);
else write(d[n]-s[n]*100005);
}