#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,cnt=0;
struct A{
int to;
int z;
int nxt;
};
A E[N];
int head[N],dis[N];
priority_queue<pair<int,int> > q;
bool vis[N];
void add(int x,int y,int z){
E[++cnt].nxt=head[x];
E[cnt].to=y;
E[cnt].z=z;
head[x]=cnt;
}
void dijkstra(){
memset(dis,0xff,sizeof(dis));
q.push(make_pair(0,1));
dis[1]=0;
while(q.size()){
int x=q.top().second;
q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=head[x];i;i=E[i].nxt)
if(dis[E[i].nxt]<E[i].z+dis[x])
dis[E[i].nxt]=E[i].z+dis[i],q.push(make_pair(dis[E[i].nxt],E[i].nxt));
}
cout<<dis[n];
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}
dijkstra();
return (0-0);
}