#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+1;
vector<pair<int,int>> g[N];
bool vis[N];
int n,m,Time,Result,S[N],T[N];
void Topo(int s)
{
for(auto x : g[s])
if(!T[x.first]) Topo(x.first);
T[Time--]=s;
}
void DFS(int u)
{
vis[u] = true;
for(auto x : g[u])
{
int v = x.first;
int w = x.second;
if(!vis[v]) DFS(v);
S[u] = max(S[v] + w,S[u]);
}
}
signed main()
{
freopen("MAXPDAG.INP","r",stdin);
freopen("MAXPDAG.out","w",stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
Time = n;
for(int i = 1; i <= m; ++i)
{
int x,y,w;
cin >> x >> y >> w;
g[x].push_back({y,w});
}
for(int i = 1; i <= n; i ++)
if(!vis[i]) Topo(i);
for(int i = 1; i <= n; i++)
if(!vis[T[i]]) DFS(T[i]);
for(int i = 1; i <= n; i++)
Result = max(Result,S[i]);
cout << Result;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTUrMTsKdmVjdG9yPHBhaXI8aW50LGludD4+IGdbTl07CmJvb2wgdmlzW05dOwppbnQgbixtLFRpbWUsUmVzdWx0LFNbTl0sVFtOXTsKCnZvaWQgVG9wbyhpbnQgcykKewogICAgZm9yKGF1dG8geCA6IGdbc10pCiAgICAgICAgaWYoIVRbeC5maXJzdF0pIFRvcG8oeC5maXJzdCk7CiAgICAgICAgVFtUaW1lLS1dPXM7Cn0KCnZvaWQgREZTKGludCB1KQp7CiAgICB2aXNbdV0gPSB0cnVlOwogICAgZm9yKGF1dG8geCA6IGdbdV0pCiAgICB7CiAgICAgICAgaW50IHYgPSB4LmZpcnN0OwogICAgICAgIGludCB3ID0geC5zZWNvbmQ7CiAgICAgICAgaWYoIXZpc1t2XSkgREZTKHYpOwogICAgICAgIFNbdV0gPSBtYXgoU1t2XSArIHcsU1t1XSk7CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkKewogICAgZnJlb3BlbigiTUFYUERBRy5JTlAiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJNQVhQREFHLm91dCIsInciLHN0ZG91dCk7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBUaW1lID0gbjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgKytpKQogICAgewogICAgICAgIGludCB4LHksdzsKICAgICAgICBjaW4gPj4geCA+PiB5ID4+IHc7CiAgICAgICAgZ1t4XS5wdXNoX2JhY2soe3ksd30pOwogICAgfQoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSArKykKICAgICAgICBpZighdmlzW2ldKSBUb3BvKGkpOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIGlmKCF2aXNbVFtpXV0pIERGUyhUW2ldKTsKCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBSZXN1bHQgPSBtYXgoUmVzdWx0LFNbaV0pOwoKICAgIGNvdXQgPDwgUmVzdWx0Owp9Cg==