#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=500000+10;
struct node{
int to,w;
node(int t,int ww){
to=t; w=ww;
}
};
vector<node> vec[maxn];
int head[maxn],vis[maxn],dis[maxn],n,m;
struct qnode {
int id,d;
qnode(int i,int dd){
id=i; d=dd;
}
friend bool operator<(qnode n1,qnode n2){
return n1.d>n2.d;
}
};
void dij(int s){
priority_queue<qnode> q;
memset(vis,0,sizeof(vis));
memset(dis,-1,sizeof(dis));
dis[s]=0;
q.push(qnode(s,0));
while(!q.empty()){
int u=q.top().id; q.pop();
if(vis[u]) continue;
vis[u]=true;
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i].to;
int w=vec[u][i].w;
if(dis[v]<dis[u]+w) {
dis[v]=dis[u]+w;
q.push(qnode(v,dis[v]));
}
}
}
}
signed main(){
int u,v,w;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
vec[u].push_back(node(v,w));
}
dij(1);
cout<<dis[n];
return 0;
}