#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <unordered_set>
#define ull unsigned long long
#define ll long long
#define pii pair<ll ,ll>
#define fi first
#define se second
#define pr pair
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define forn(i,n) for(int (i)=0;(i)<(n);(i)++)
#define forne(i,n) for(int (i)=1;(i)<=(n);(i)++)
#define rforn(i,n) for(int (i)=(n-1);(i)>=(0);(i)--)
#define rforne(i,n) for(int (i)=(n);(i)>=(1);(i)--)
#define sorta(a) sort((a).begin(),(a).end())
#define sortcmp(a,cmp) sort((a).begin(),(a).end(),cmp)
#define v vector
const int inf = 1e9;
const int N = 2e5 + 5;
ll t;
void solve() {
int n, m; cin >> n >> m;
ll d[1505][1505];
forne(i, n)
forne(j, n)
if (i == j)
d[i][j] = 0;
else
d[i][j] = inf;
forn(i, m) {
ll a, b, c;
cin >> a >> b >> c;
d[a][b] = min(d[a][b], -c);
}
forne(k, n) {
forne(i, n) {
forne(j, n) {
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
}
}
if (d[1][n] == inf)
cout << -1 << endl;
else
cout << -d[1][n] << endl;
}
int main() {
t = 1;
while (t--)
solve();
return 0;
}