n, m = map(int,input().split()) item = [[0] * n for i in range(n)] for i in range(m): item1, item2, score = map(int,input().split()) item1 -= 1 item2 -= 1 item[item1][item2] = score dp = [0] * (1 << n) #既に並べた品物の集合を表す for i in range(1 << n): for j in range(n): #品物jが並べられている if (i >> j) % 2 == 1: continue #品物jが並べられていない ok = True get_score = 0 for k in range(n): #品物kが並べられている if (i >> k) % 2 == 0: #品物j が品物k より先に並べられたという情報があったとき get_score += item[j][k] dp[i | (1 << j)] = max(dp[i | (1 << j)], dp[i] + get_score) print(dp[(1 << n) - 1])