#include<bits/stdc++.h>
using namespace std;
const int MAXN=300010;
queue<long long>q;
long long v[MAXN],w[MAXN],nxt[MAXN],head[MAXN],idx;
long long t,n,m,dis[MAXN],cnt[MAXN];
bool vis[MAXN],ansb;
void addEdge(long long uu,long long vv,long long ww)
{
idx++;
nxt[idx]=head[uu];
head[uu]=idx;
v[idx]=vv;
w[idx]=ww;
}
void spfa()
{
q.push(1);
vis[1]=1;
dis[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
vis[x]=0;
for(int i=head[x];i!=0;i=nxt[i])
{
long long vv=v[i];
if(dis[x]+w[i]>dis[vv])
{
dis[vv]=dis[x]+w[i];
if(++cnt[vv]>=n) return ;
if(!vis[vv])
{
if(vv==n) ansb=1;
q.push(vv);
vis[vv]=1;
}
}
}
}
return ;
}
int main()
{
memset(dis,-800000000,sizeof(dis));
cin>>n>>m;
long long uu,vv,ww;
for(int i=1;i<=m;i++)
{
cin>>uu>>vv>>ww;
if(ww>=0)
{
addEdge(uu,vv,ww);
}
else addEdge(uu,vv,ww);
}
spfa();
if(ansb)cout<<dis[n];
else cout<<-1;
}