#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <deque>
using namespace std;
const int N=1505;
int n,m;
int head[N];
int nxt[N];
int to[N];
int dist[N];
int ver[N];
bool vis[N];
int tot=0;
deque<int> q;
inline void add_edge(int x,int y,int z)
{
nxt[++tot]=head[x];
head[x]=tot;
to[tot]=y;
ver[tot]=z;
}
void spfa()
{
int s=1;
q.push_back(s);
vis[s]=1;
dist[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop_front();
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
int z=ver[i];
if(dist[y]>dist[x]+z)
{
dist[y]=dist[x]+z;
if(!vis[y])
{
vis[y]=1;
if(dist[y]<dist[x])
{
q.push_front(y);
}
else
{
q.push_back(y);
}
}
}
}
vis[x]=0;
}
}
inline int read()
{
char ch=getchar();
int s=0,f=1;
while(ch<'0' || ch>'9')
{
if(ch=='-')
{
f=-1;
}
ch=getchar();
}
while(ch>='0' && ch<='9')
{
s=s*10+ch-'0';
ch=getchar();
}
return s*f;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
dist[i]=2e9;
}
int u,v,w;
for(int i=1;i<=m;i++)
{
u=read();
v=read();
w=read();
add_edge(u,v,-w);
}
spfa();
if(-dist[n]==-2e9)
{
cout<<-1;
return 0;
}
cout<<-dist[n];
return 0;
}