#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3, "Ofast", "inline")
#include<bits/stdc++.h>
using namespace std;
#define re register
#define fi first
#define se second
#define swap(a, b) a ^= b, b ^= a, a ^= b
#define pb push_back
#define all(x) x.begin(), x.end()
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
#define il inline
typedef pair<int, int> PII;
const int N = 1e6 + 149040;
const int M = 1e6 + 10;
const int INF = 1e18, mod = 1145141;
const double eps = 1e-6;
int n, m, d[105][105], f[21][2 * N], g[2 * N];
inline int dfs (const int i, const int s) {
if (g[s] == n) return 0;
if (f[i][s] != -1) return f[i][s];
register int ans = 1e9;
for (register int j = 1; j <= n; ++ j )
if (!(s & (1 << j)) && d[i][j] < 1e8)
ans = min(ans, dfs (j, s | (1 << j)) + d[i][j]);
return f[i][s] = ans;
}
signed main() {
for (register int i = 1; i < 2 * N; ++ i ) {
register int x = i;
while (x) {
++ g[i];
x ^= x & -x;
}
}
memset(f, -1, sizeof(f));
scanf("%d%d", &n, &m);
for (register int i = 1; i <= n; ++ i )
for (register int j = 1; j <= n; ++ j )
d[i][j] = 1e9;
for (register int i = 1; i <= n; ++ i ) d[i][i] = 0;
while (m -- ) {
register int u, v, w;
scanf("%d%d%d", &u, &v, &w);
d[u][v] = w;
}
for (register int k = 1; k <= n; ++ k )
for (register int i = 1; i <= n; ++ i )
for (register int j = 1; j <= n; ++ j )
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
bool f = true;
for (int i = 1; i <= n; ++ i ) {
bool is = true;
for (int j = 1; j <= n; ++ j ) is &= d[i][j] < 1e8;
if (is) {
f = false;
break;
}
}
if (f) {
puts("No");
return 0;
}
register int ans = 1e9;
for (register int i = 1; i <= n; ++ i ) {
bool is = true;
for (int j = 1; j <= n; ++ j ) is &= d[i][j] < 1e8;
if (is) ans = min(ans, dfs (i, 1 << i));
}
if (ans > 1e8) puts("No");
else printf("%d\n", ans);
return 0;
}