#include<bits/stdc++.h>
using namespace std;

#define go(i,a,b) for(int i=a;i<=b;++i)
#define com(i,a,b) for(int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define fo(i,a) for(int i=0;i<a;++i)
#define il inline

const int inf=0x3f3f3f3f,N=4e4;

int n,m,block[N],dp[N][20],g[20][20];

il void read(int &x){
	x=0;char c=getchar(),f=1;
	while(!isdigit(c)){ if(c=='-') f=-1; c=getchar(); }
	while(isdigit(c)){ x=x*10+c-'0'; c=getchar(); }
	x*=f;
}
il void gmax(int &x,const int &y){
	x=x>y?x:y;
}

int main(){
	//freopen("input.txt","r",stdin);
	read(n),read(m);
	int x,y,w;
	go(i,1,m){
		read(x),read(y),read(w);
		--x,--y;
		g[x][y]=g[y][x]=w;
	}
	int all=(1<<n)-1;
	go(i,1,all)
		fo(j,n){
			if(i>>j&1){
				block[i]=block[i^1<<j];
				fo(k,n) if(i>>k&1) block[i]+=g[j][k];
				break;
			}
		}
	mem(dp,-1);
	dp[1][0]=0;
	go(i,1,all)
		fo(j,n)
			if(i>>j&1&&dp[i][j]!=-1){
				fo(k,n)
					if(!(i>>k&1)&&g[j][k])
						gmax(dp[i|1<<k][k],dp[i][j]+g[j][k]);
				int tmp=(all^i)|1<<j;
				for(int k=tmp;k;k=(k-1)&tmp){
					if(k>>j&1)
						gmax(dp[i|k][j],dp[i][j]+block[k]);
				}
			}
	cout<<block[all]-dp[all][n-1];
	return 0;
}