#include <bits/stdc++.h>
#define FNAME "RESCUE"
using namespace std;
typedef long long ll;
const int MAXN = (int)505;
const int LIM = (int)1e6 + 1;
const long long MOD = (long long)1e13 + 15092007;
#define xd '\n'
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pli pair<long long, int>
#define fi first
#define se second
const long long base = (long long)256;
const long long INF = (long long)1e14;
template<class X, class Y> bool minimize(X &a, Y b) {if(a>b){a=b;return true;}return false;};
template<class X, class Y> bool maximize(X &a, Y b) {if(a<b){a=b;return true;}return false;};
void HuuThien() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(FNAME".inp", "r")) {
freopen(FNAME".inp", "r", stdin);
freopen(FNAME".out", "w", stdout);
}
}
int n, k;
vector<vector<long long>> grid;
bool visX[MAXN], visY[MAXN];
vector<long long> lx, ly;
vector<long long> slack;
vector<long long> matchU, matchV;
bool dfs(int u) {
visX[u] = true;
for(int v = 1; v <= n ; v++) {
if(visY[v]) continue;
long long delta = lx[u] + ly[v] - grid[u][v];
if(delta == 0) {
visY[v] = true;
if(!matchV[v] or dfs(matchV[v])) {
matchV[v] = u;
matchU[u] = v;
return true;
}
} else {
slack[v] = min(slack[v], delta);
}
}
return false;
}
void Hungarian() {
for(int u = 1; u <= n ; u++) {
for(int v = 1; v <= n ; v++) {
lx[u] = max(lx[u], grid[u][v]);
}
}
for(int u = 1; u <= n ; u++) {
for(int v = 1; v <= n ; v++) {
slack[v] = INF;
}
while(true) {
memset(visX, false, sizeof(visX));
memset(visY, false, sizeof(visY));
if(dfs(u)) break;
long long delta = INF;
for(int v = 1; v <= n ; v++) {
if(!visY[v]) {
delta = min(delta, slack[v]);
}
}
for(int u = 1; u <= n ; u++) {
if(visX[u]) {
lx[u] -= delta;
}
}
for(int v = 1; v <= n ; v++) {
if(visY[v]) {
ly[v] += delta;
} else {
slack[v] -= delta;
}
}
}
}
}
void Init() {
cin >> n >> k;
slack.assign(n + 1, 0);
lx.assign(n + 1, 0);
ly.assign(n + 1 , 0);
matchU.assign(n + 1, 0);
matchV.assign(n + 1, 0);
grid.assign(n + 1, vector<long long>(n + 1, 0));
for(int i = 1; i <= n ; i++) {
for(int j = 1; j <= n ; j++) {
grid[i][j] = INF;
}
}
for(int i = 1; i <= k ; i++) {
int u, v;
long long t;
cin >> u >> v >> t;
grid[u][v] = min(grid[u][v], t);
}
for(int i = 1; i <= n ; i++) {
for(int j = 1; j <= n ; j++) {
grid[i][j] = -grid[i][j];
}
}
}
void Solve() {
Hungarian();
long long res = 0;
int countNode = 0;
for(int u = 1; u <= n ; u++) {
if(matchU[u]) {
countNode++;
res -= grid[u][matchU[u]];
}
}
cout << (countNode == n ? res : -1);
}
signed main() {
HuuThien();
Init();
Solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk5BTUUgIlJFU0NVRSIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGludCBNQVhOID0gKGludCk1MDU7CmNvbnN0IGludCBMSU0gPSAoaW50KTFlNiArIDE7CmNvbnN0IGxvbmcgbG9uZyBNT0QgPSAobG9uZyBsb25nKTFlMTMgKyAxNTA5MjAwNzsKI2RlZmluZSB4ZCAnXG4nCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgcGxsIHBhaXI8bG9uZyBsb25nLCBsb25nIGxvbmc+CiNkZWZpbmUgcGxpIHBhaXI8bG9uZyBsb25nLCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKY29uc3QgbG9uZyBsb25nIGJhc2UgPSAobG9uZyBsb25nKTI1NjsKY29uc3QgbG9uZyBsb25nIElORiA9IChsb25nIGxvbmcpMWUxNDsKdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWT4gYm9vbCBtaW5pbWl6ZShYICZhLCBZIGIpIHtpZihhPmIpe2E9YjtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO307CnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFk+IGJvb2wgbWF4aW1pemUoWCAmYSwgWSBiKSB7aWYoYTxiKXthPWI7cmV0dXJuIHRydWU7fXJldHVybiBmYWxzZTt9OwoKdm9pZCBIdXVUaGllbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbihGTkFNRSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oRk5BTUUiLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oRk5BTUUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0gCn0KCmludCBuLCBrOwp2ZWN0b3I8dmVjdG9yPGxvbmcgbG9uZz4+IGdyaWQ7CmJvb2wgdmlzWFtNQVhOXSwgdmlzWVtNQVhOXTsKdmVjdG9yPGxvbmcgbG9uZz4gbHgsIGx5Owp2ZWN0b3I8bG9uZyBsb25nPiBzbGFjazsKdmVjdG9yPGxvbmcgbG9uZz4gbWF0Y2hVLCBtYXRjaFY7Cgpib29sIGRmcyhpbnQgdSkgewogICAgdmlzWFt1XSA9IHRydWU7CgogICAgZm9yKGludCB2ID0gMTsgdiA8PSBuIDsgdisrKSB7CiAgICAgICAgaWYodmlzWVt2XSkgY29udGludWU7CgogICAgICAgIGxvbmcgbG9uZyBkZWx0YSA9IGx4W3VdICsgbHlbdl0gLSBncmlkW3VdW3ZdOwogICAgICAgIGlmKGRlbHRhID09IDApIHsKICAgICAgICAgICAgdmlzWVt2XSA9IHRydWU7CiAgICAgICAgICAgIGlmKCFtYXRjaFZbdl0gb3IgZGZzKG1hdGNoVlt2XSkpIHsKICAgICAgICAgICAgICAgIG1hdGNoVlt2XSA9IHU7CiAgICAgICAgICAgICAgICBtYXRjaFVbdV0gPSB2OwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzbGFja1t2XSA9IG1pbihzbGFja1t2XSwgZGVsdGEpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCnZvaWQgSHVuZ2FyaWFuKCkgewogICAgZm9yKGludCB1ID0gMTsgdSA8PSBuIDsgdSsrKSB7CiAgICAgICAgZm9yKGludCB2ID0gMTsgdiA8PSBuIDsgdisrKSB7CiAgICAgICAgICAgIGx4W3VdID0gbWF4KGx4W3VdLCBncmlkW3VdW3ZdKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yKGludCB1ID0gMTsgdSA8PSBuIDsgdSsrKSB7CiAgICAgICAgZm9yKGludCB2ID0gMTsgdiA8PSBuIDsgdisrKSB7CiAgICAgICAgICAgIHNsYWNrW3ZdID0gSU5GOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUodHJ1ZSkgewogICAgICAgICAgICBtZW1zZXQodmlzWCwgZmFsc2UsIHNpemVvZih2aXNYKSk7CiAgICAgICAgICAgIG1lbXNldCh2aXNZLCBmYWxzZSwgc2l6ZW9mKHZpc1kpKTsKCiAgICAgICAgICAgIGlmKGRmcyh1KSkgYnJlYWs7CgogICAgICAgICAgICBsb25nIGxvbmcgZGVsdGEgPSBJTkY7CgogICAgICAgICAgICBmb3IoaW50IHYgPSAxOyB2IDw9IG4gOyB2KyspIHsKICAgICAgICAgICAgICAgIGlmKCF2aXNZW3ZdKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBtaW4oZGVsdGEsIHNsYWNrW3ZdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yKGludCB1ID0gMTsgdSA8PSBuIDsgdSsrKSB7CiAgICAgICAgICAgICAgICBpZih2aXNYW3VdKSB7CiAgICAgICAgICAgICAgICAgICAgbHhbdV0gLT0gZGVsdGE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcihpbnQgdiA9IDE7IHYgPD0gbiA7IHYrKykgewogICAgICAgICAgICAgICAgaWYodmlzWVt2XSkgewogICAgICAgICAgICAgICAgICAgIGx5W3ZdICs9IGRlbHRhOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzbGFja1t2XSAtPSBkZWx0YTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBJbml0KCkgewogICAgY2luID4+IG4gPj4gazsKICAgIHNsYWNrLmFzc2lnbihuICsgMSwgMCk7CiAgICBseC5hc3NpZ24obiArIDEsIDApOwogICAgbHkuYXNzaWduKG4gKyAxICwgMCk7CiAgICBtYXRjaFUuYXNzaWduKG4gKyAxLCAwKTsKICAgIG1hdGNoVi5hc3NpZ24obiArIDEsIDApOwoKICAgIGdyaWQuYXNzaWduKG4gKyAxLCB2ZWN0b3I8bG9uZyBsb25nPihuICsgMSwgMCkpOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbiA7IGkrKykgewogICAgICAgIGZvcihpbnQgaiA9IDE7IGogPD0gbiA7IGorKykgewogICAgICAgICAgICBncmlkW2ldW2pdID0gSU5GOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IGsgOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBsb25nIGxvbmcgdDsKICAgICAgICBjaW4gPj4gdSA+PiB2ID4+IHQ7CiAgICAgICAgZ3JpZFt1XVt2XSA9IG1pbihncmlkW3VdW3ZdLCB0KTsKICAgIH0KCiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG4gOyBpKyspIHsKICAgICAgICBmb3IoaW50IGogPSAxOyBqIDw9IG4gOyBqKyspIHsKICAgICAgICAgICAgZ3JpZFtpXVtqXSA9IC1ncmlkW2ldW2pdOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBTb2x2ZSgpIHsKICAgIEh1bmdhcmlhbigpOwoKICAgIGxvbmcgbG9uZyByZXMgPSAwOwogICAgaW50IGNvdW50Tm9kZSA9IDA7CgogICAgZm9yKGludCB1ID0gMTsgdSA8PSBuIDsgdSsrKSB7CiAgICAgICAgaWYobWF0Y2hVW3VdKSB7CiAgICAgICAgICAgIGNvdW50Tm9kZSsrOwogICAgICAgICAgICByZXMgLT0gZ3JpZFt1XVttYXRjaFVbdV1dOwogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8IChjb3VudE5vZGUgPT0gbiA/IHJlcyA6IC0xKTsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBIdXVUaGllbigpOwogICAgSW5pdCgpOwogICAgU29sdmUoKTsKfQ==