#include<bits/stdc++.h>
using namespace std;
int n,m;
int flag=0;
int tot=0;
int head[150005];
int dist[150005],visited[150005];
struct edge{
int nxt;
int w;
int to;
}e[500005];
void addEdge(int u,int v,int w){
e[++tot].to=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot;
}
void spfa(int x){
memset(dist,0x7f,sizeof(dist));
memset(visited,0,sizeof(visited));
queue<int> q;
dist[x]=0,visited[x]=1;
q.push(x);
while (!q.empty()){
int u=q.front();
q.pop();
visited[u]=1;
for (int i=head[u];i;i=e[i].nxt){
int v=e[i].to,w=e[i].w;
if (dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
if (!visited[v]){
q.push(v);
visited[v]=1;
}
if(v==n)
flag=1;
}
}
}
}
int main(){
cin>>n>>m;
for (int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
addEdge(u,v,w);
}
spfa(1);
if (flag) cout<<dist[n];
else cout<<-1;
return 0;
}