#include<bits/stdc++.h>
using namespace std;
struct node
{
int tv,w;
};
vector<node> e[1501];
queue<int> q;
int n,m,dep[1501],cnt;
long long dp[1501];
const long long INF=(-1)*(1e9+7);
bool topsort()
{
while(q.size())
{
int u=q.front();
q.pop();
cnt++;
for(auto v:e[u])
{
if(--dep[v.tv]==0)q.push(v.tv);
dp[v.tv]=max(dp[v.tv],dp[u]+v.w);
}
}
if(cnt!=n)return false;
else return true;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
e[u].push_back({v,w});
dp[v]=INF;
dep[v]++;
}
if(dep[n]==0)
{
cout<<-1;
return 0;
}
for(int i=1;i<=n;i++)if(dep[i]==0)q.push(i);
if(topsort())cout<<dp[n];
else cout<<-1;
return 0;
}