#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
long long n, m, dp[N];
long long num[N];
struct SJC {
long long v, w;
};
vector<SJC> why[N];
void topo() {
for (int i = 1; i <= n; ++i) {
dp[i] = -1e18;
}
queue<long long> que;
for (int i = 1; i <= n; ++i) {
if (!num[i]) {
dp[i] = 0;
que.push(i);
}
}
while (!que.empty()) {
long long u = que.front();
que.pop();
for (long long i = 0; i < why[u].size(); ++i) {
long long v = why[u][i].v, w = why[u][i].w;
if (dp[v] < dp[u] + w)
dp[v] = dp[u] + w;
--num[v];
if (!num[v])
que.push(v);
}
}
if (dp[n] < -1e15)
cout << -1;
else
cout << dp[n];
return ;
}
int main() {
cin.tie(0) -> ios::sync_with_stdio(false);
cin >> n >> m;
for (long long i = 1; i <= m; ++i) {
long long u, v, w;
cin >> u >> v >> w;
why[u].push_back({v, w});
++num[v];
}
topo();
return 0;
}