#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int n,m,u,v,w,flag=-1,dp[2000]={},ind[2000],f[2000][2000],ans;
bool mark[2000][2000]={},mark1[2000][2000]={},mark2[2000]={};
queue<int>q;
vector<int>v1[2000];
int main()
{
cin >> n >> m;
for(int i=1;i<=m;i++)
{
cin >> u >> v >> w;
if(!mark1[u][v])
{
f[u][v]=w;
mark1[u][v]=1;
}
else f[u][v]=max(f[u][v],w);
if(!mark[u][v])
{
v1[u].push_back(v);
mark[u][v]=1;
ind[v]++;
}
}
q.push(1);
while(!q.empty())
{
int tmp=q.front();
if(tmp==n)
{
ans=max(ans,dp[n]);
flag=1;
}
q.pop();
for(int i=0;i<v1[tmp].size();i++)
{
int u=v1[tmp][i];
if(!mark2[u])
{
dp[u]=f[tmp][u];
mark2[u]=1;
}
else dp[u]=max(dp[u],dp[tmp]+f[tmp][u]);
ind[u]--;
if(!ind[u]) q.push(u);
}
}
if(flag==1) cout << ans;
else cout << flag;
}