record
#include <bits/stdc++.h>
using namespace std;
#define hh putchar('\n')
#define kg putchar(' ')
#define debug puts("debug")
namespace quickread{
template<typename T> void read(T &x){
x=0;char c=getchar();T neg=0;
while(!isdigit(c)) neg|=!(c^'-'),c=getchar();
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(neg) x=(~x)+1;
}
template<typename T> void write(T x){
if(x<0) putchar('-'),x=~x+1;
if(x>9) write(x/10);
putchar(x%10^48);
}
}
using namespace quickread;
const int N=22,inf=0x3f3f3f3f;
int n,m,dp[1<<N][N],dis[N][N],ans;
signed main(){
read(n),read(m);
for(int i=1,u,v;i<=m;++i) read(u),read(v),read(dis[u][v]);
for(int i=1;i<(1<<n);++i)
for(int j=0;j<n;++j)
dp[i][j]=-inf;
for(int i=1;i<n;++i) if(dis[0][i]) dp[(1<<i)+1][i]=dis[0][i];
for(int i=1;i<(1<<n);++i)
for(int j=1;j<n;++j)
if((i>>j)&1)
for(int k=0;k<n;++k)
if((i>>k)&1&&j^k)
dp[i][j]=max(dp[i][j],dp[i^(1<<j)][k]+dis[k][j]);
for(int i=(1<<n-1)+1;i<(1<<n);i+=2)
ans=max(ans,dp[i][n-1]);
write(ans);
return 0;
}