#include<cstdio>
#include<cstring>
#include<bitset>
using namespace std;
int n,m,a,b,w;
int eg[609][609];
bitset<609>vis,dead;
int dist[609];
int contract(int &s,int &t){
vis=bitset<609>(0);
memset(dist,0,sizeof(dist));
int mincut,maxc,k;
while(true){
maxc=k=-1;
for(int i=1;i<=n;i++){
if(!dead[i]&&!vis[i]&&dist[i]>maxc){
k=i;
maxc=dist[i];
}
}
if(k==-1)return mincut;
vis[k]=true;
s=t;
t=k;
mincut=maxc;
for(int i=1;i<=n;i++){
if(!dead[i]&&!vis[i])dist[i]+=eg[k][i];
}
}
return mincut;
}
int Stoer_Wagner(){
int mincut=2e9,s,t,tp=n-1;
dead=bitset<609>(0);
while(tp!=0){
const int ans=contract(s,t);
if(ans<mincut)
mincut=ans;
dead[t]=true;
if(mincut==0)return 0;
for(int i=1;i<=n;i++){
if(!dead[i])eg[i][s]=eg[s][i]=eg[i][s]+eg[i][t];
}
tp--;
}
return mincut;
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d %d %d",&a,&b,&w);
eg[a][b]+=w,eg[b][a]+=w;
}
printf("%d\n",Stoer_Wagner());
return 0;
}