#include <iostream>
#include <queue>
#define ll long long
#include <vector>
#define INF (1000*1000*1000+1)
using namespace std;
struct edge{
ll u1;
ll u2;
ll cap;
ll flow;
};
bool bfs(vector<vector<ll> > adj,vector<ll> &level,vector<edge> elist,ll src,ll sink){
ll n=adj.size()-1;
for(ll i=1;i<=n;i++)
level[i]=-1;
queue<ll> q;
q.push(src);
level[src]=0;
while(!q.empty()){
ll k=q.size();
for(ll i=0;i<k;i++){
ll cur=q.front();
q.pop();
for(auto x:adj[cur]){
ll v1=elist[x].u2;
if(level[v1]==-1 && elist[x].flow<elist[x].cap){
level[v1]=level[cur]+1;
q.push(v1);
}
}
}
}
if(level[sink]==-1)
return 0;
return 1;
}
ll block(vector<vector<ll> > adj,vector<ll> level,ll src,ll sink,vector<edge> &elist,ll pushed,vector<ll> &start){
//cout<<src<<" "<<pushed<<endl;
if(pushed==0)
return 0;
if(src==sink)
return pushed;
for( ;start[src]<adj[src].size();start[src]++){
ll v1=elist[adj[src][start[src]]].u2;
ll cap=elist[adj[src][start[src]]].cap;
ll flow=elist[adj[src][start[src]]].flow;
if(level[v1]==level[src]+1 && flow<cap){
//cout<<"h"<<src<<" "<<v1<<" "<<cap<<" "<<flow<<endl;
ll temp=block(adj,level,v1,sink,elist,min(pushed,cap-flow),start);
if(temp>0){
elist[adj[src][start[src]]].flow+=temp;
elist[adj[src][start[src]]^1].flow-=temp;
return temp;
}
}
}
return 0;
}
ll dinc(vector<vector<ll> > adj,vector<edge> &elist,ll src,ll sink){
ll ans=0;
ll n=adj.size()-1;
vector<ll> level(n+1);
while(bfs(adj,level,elist,src,sink)){
ll temp=0;
vector<ll> start(n+1);
for(ll i=1;i<=n;i++)
start[i]=0;
ll pushed=INF;
while((temp=block(adj,level,src,sink,elist,pushed,start))!=0){
ans+=temp;
}
}
return ans;
}
int main() {
// your code goes here
ll n,m;
scanf("%lld %lld",&n,&m);
ll isedge[n+1][n+1];
for(ll i=1;i<=n;i++){
for(ll j=1;j<=n;j++)
isedge[i][j]=-1;
}
vector<edge> elist;
vector<vector<ll> >adj(n+1);
ll cur=0;
for(ll i=1;i<=m;i++){
ll a,b,c;
scanf("%lld %lld %lld",&a,&b,&c);
if(a==b)
continue;
if(isedge[a][b]==-1){
isedge[a][b]=cur;
isedge[b][a]=cur+1;
edge e;
e.u1=a;
e.u2=b;
e.cap=c;
e.flow=0;
elist.push_back(e);
e.u1=b;
e.u2=a;
e.cap=c;
e.flow=0;
elist.push_back(e);
adj[a].push_back(cur);
adj[b].push_back(cur+1);
cur+=2;
}
else{
elist[isedge[a][b]].cap+=c;
elist[isedge[b][a]].cap+=c;
}
}
ll ans=dinc(adj,elist,1,n);
printf("%lld",ans);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNpbmNsdWRlIDx2ZWN0b3I+CiNkZWZpbmUgSU5GICgxMDAwKjEwMDAqMTAwMCsxKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgZWRnZXsKCWxsIHUxOwoJbGwgdTI7CglsbCBjYXA7CglsbCBmbG93OwoJCn07CgoKYm9vbCBiZnModmVjdG9yPHZlY3RvcjxsbD4gPiBhZGosdmVjdG9yPGxsPiAmbGV2ZWwsdmVjdG9yPGVkZ2U+IGVsaXN0LGxsIHNyYyxsbCBzaW5rKXsKCWxsIG49YWRqLnNpemUoKS0xOwoJZm9yKGxsIGk9MTtpPD1uO2krKykKCWxldmVsW2ldPS0xOwoJcXVldWU8bGw+IHE7CglxLnB1c2goc3JjKTsKCWxldmVsW3NyY109MDsKCQoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJbGwgaz1xLnNpemUoKTsKCQlmb3IobGwgaT0wO2k8aztpKyspewoJCQlsbCBjdXI9cS5mcm9udCgpOwoJCQlxLnBvcCgpOwoJCQlmb3IoYXV0byB4OmFkaltjdXJdKXsKCQkJCWxsIHYxPWVsaXN0W3hdLnUyOwoJCQkJaWYobGV2ZWxbdjFdPT0tMSAmJiBlbGlzdFt4XS5mbG93PGVsaXN0W3hdLmNhcCl7CgkJCQkJbGV2ZWxbdjFdPWxldmVsW2N1cl0rMTsKCQkJCQlxLnB1c2godjEpOwoJCQkJfQoJCQl9CgkJfQoJfQoJaWYobGV2ZWxbc2lua109PS0xKQoJcmV0dXJuIDA7CglyZXR1cm4gMTsKfQpsbCBibG9jayh2ZWN0b3I8dmVjdG9yPGxsPiA+IGFkaix2ZWN0b3I8bGw+IGxldmVsLGxsIHNyYyxsbCBzaW5rLHZlY3RvcjxlZGdlPiAmZWxpc3QsbGwgcHVzaGVkLHZlY3RvcjxsbD4gJnN0YXJ0KXsKCS8vY291dDw8c3JjPDwiICI8PHB1c2hlZDw8ZW5kbDsKCglpZihwdXNoZWQ9PTApCglyZXR1cm4gMDsKCWlmKHNyYz09c2luaykKCXJldHVybiBwdXNoZWQ7Cglmb3IoIDtzdGFydFtzcmNdPGFkaltzcmNdLnNpemUoKTtzdGFydFtzcmNdKyspewoJCWxsIHYxPWVsaXN0W2FkaltzcmNdW3N0YXJ0W3NyY11dXS51MjsKCQkKCQkKCQlsbCBjYXA9ZWxpc3RbYWRqW3NyY11bc3RhcnRbc3JjXV1dLmNhcDsKCQlsbCBmbG93PWVsaXN0W2FkaltzcmNdW3N0YXJ0W3NyY11dXS5mbG93OwoJCQoJCQoJCWlmKGxldmVsW3YxXT09bGV2ZWxbc3JjXSsxICYmIGZsb3c8Y2FwKXsKCQkJLy9jb3V0PDwiaCI8PHNyYzw8IiAiPDx2MTw8IiAiPDxjYXA8PCIgIjw8Zmxvdzw8ZW5kbDsKCQkJbGwgdGVtcD1ibG9jayhhZGosbGV2ZWwsdjEsc2luayxlbGlzdCxtaW4ocHVzaGVkLGNhcC1mbG93KSxzdGFydCk7CgkJCWlmKHRlbXA+MCl7CgkJCQllbGlzdFthZGpbc3JjXVtzdGFydFtzcmNdXV0uZmxvdys9dGVtcDsKCQkJCQoJCQkJZWxpc3RbYWRqW3NyY11bc3RhcnRbc3JjXV1eMV0uZmxvdy09dGVtcDsKCQkJCQoJCQkJCgkJCQlyZXR1cm4gdGVtcDsKCQkJfQoJCX0KCQkKCQkKCX0KCXJldHVybiAwOwp9CgpsbCBkaW5jKHZlY3Rvcjx2ZWN0b3I8bGw+ID4gYWRqLHZlY3RvcjxlZGdlPiAmZWxpc3QsbGwgc3JjLGxsIHNpbmspewoJbGwgYW5zPTA7CglsbCBuPWFkai5zaXplKCktMTsKCXZlY3RvcjxsbD4gbGV2ZWwobisxKTsKCXdoaWxlKGJmcyhhZGosbGV2ZWwsZWxpc3Qsc3JjLHNpbmspKXsKCQoJCWxsIHRlbXA9MDsKCQl2ZWN0b3I8bGw+IHN0YXJ0KG4rMSk7CgkJZm9yKGxsIGk9MTtpPD1uO2krKykKCQlzdGFydFtpXT0wOwoJCWxsIHB1c2hlZD1JTkY7CgkJCgkJd2hpbGUoKHRlbXA9YmxvY2soYWRqLGxldmVsLHNyYyxzaW5rLGVsaXN0LHB1c2hlZCxzdGFydCkpIT0wKXsKCQkKCQkJYW5zKz10ZW1wOwoJCX0KCQkKCQkKCQkKCX0KCXJldHVybiBhbnM7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJbGwgbixtOwoJc2NhbmYoIiVsbGQgJWxsZCIsJm4sJm0pOwoJbGwgaXNlZGdlW24rMV1bbisxXTsKCWZvcihsbCBpPTE7aTw9bjtpKyspewoJCWZvcihsbCBqPTE7ajw9bjtqKyspCgkJaXNlZGdlW2ldW2pdPS0xOwoJfQoJdmVjdG9yPGVkZ2U+IGVsaXN0OwoJdmVjdG9yPHZlY3RvcjxsbD4gPmFkaihuKzEpOwoJbGwgY3VyPTA7Cglmb3IobGwgaT0xO2k8PW07aSsrKXsKCQlsbCBhLGIsYzsKCQlzY2FuZigiJWxsZCAlbGxkICVsbGQiLCZhLCZiLCZjKTsKCQlpZihhPT1iKQoJCWNvbnRpbnVlOwoJCWlmKGlzZWRnZVthXVtiXT09LTEpewoJCQlpc2VkZ2VbYV1bYl09Y3VyOwoJCQlpc2VkZ2VbYl1bYV09Y3VyKzE7CgkJCWVkZ2UgZTsKCQkJZS51MT1hOwoJCQllLnUyPWI7CgkJCWUuY2FwPWM7CgkJCWUuZmxvdz0wOwoJCQllbGlzdC5wdXNoX2JhY2soZSk7CgkJCWUudTE9YjsKCQkJZS51Mj1hOwoJCQllLmNhcD1jOwoJCQllLmZsb3c9MDsKCQkJZWxpc3QucHVzaF9iYWNrKGUpOwoJCQlhZGpbYV0ucHVzaF9iYWNrKGN1cik7CgkJCWFkaltiXS5wdXNoX2JhY2soY3VyKzEpOwoJCQljdXIrPTI7CgkJfQoJCWVsc2V7CgkJCWVsaXN0W2lzZWRnZVthXVtiXV0uY2FwKz1jOwoJCQllbGlzdFtpc2VkZ2VbYl1bYV1dLmNhcCs9YzsKCQl9Cgl9CgkKCWxsIGFucz1kaW5jKGFkaixlbGlzdCwxLG4pOwoJcHJpbnRmKCIlbGxkIixhbnMpOwoJCglyZXR1cm4gMDsKfQ==