#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,w;
struct node{
int to,val;
};
struct point{
int id,distance;
bool operator < (const point & a)const{
return distance<a.distance;
}
};
int dis[1501];
bool vis[1501];
priority_queue<point>q;
vector<node>gragh[1501];
void dijkstra(){
for(int i=2;i<=n;i++){
dis[i]=-0x3f3f3f3f;
}
point curr;
q.push({1,0});
while(!q.empty()){
curr=q.top();q.pop();
if(vis[curr.id])continue;
vis[curr.id]=1;
for(int i=0;i<gragh[curr.id].size();i++){
if(dis[gragh[curr.id][i].to]<dis[curr.id]+gragh[curr.id][i].val){
dis[gragh[curr.id][i].to]=dis[curr.id]+gragh[curr.id][i].val;
q.push({gragh[curr.id][i].to,dis[gragh[curr.id][i].to]});
}
}
}
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d %d",&u,&v,&w);
gragh[u].push_back({v,w});
}
dijkstra();
if(dis[n]==-0x3f3f3f3f)cout<<-1;
else cout<<dis[n];
return 0;
}