#include<iostream>
#include<cmath>
#include<cstring>
#define maxx 1510
#include<queue>
using namespace std;
vector<int>p[maxx];
queue<int>q;
int n,m,dist[maxx][maxx],f[maxx],ans,tmp;
bool visx[maxx],visy[maxx];
int main(){
cin>>n>>m;
memset(dist,0,sizeof(dist));
memset(visx,0,sizeof(visx));
memset(visy,0,sizeof(visy));
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y>>tmp;
if(visx[x]==1&&visy[y]==1&&tmp>dist[x][y])dist[x][y]=tmp;//取最远的路
visx[x]=1,visy[y]=1;
p[x].push_back(y);
}
q.push(1);
f[1]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=0;i<p[x].size();i++){
int y=p[x][i];
f[y]=max(f[y],f[x]+dist[x][y]);
q.push(y);
}
}
if(f[n]==0)cout<<"-1";
else cout<<f[n];
return 0;
}