#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n,m,i,j,fmin,flux,b[1001],t[1001],f[1001][1001];
vector <int> fr,a[1001];
vector <int>::iterator it;
int bfs()
{
int p,u,uu;
vector <bool> v(1001,0);
p=u=uu=1;
b[1]=1;
fr.clear();
for(p=1;p<=u;p++)
{
uu=u;
for(it=a[b[p]].begin();it!=a[b[p]].end();it++)
if(f[b[p]][*it]+f[*it][b[p]]>0 && !v[*it])
{
v[*it]=1;
t[*it]=b[p];
b[++u]=*it;
}
if(uu==u && f[b[p]][n]+f[n][b[p]]>0 && b[p]!=1)
fr.push_back(b[p]);
}
if(fr.size())
return 1;
else
return 0;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d",&n,&m);
while(m)
{
scanf("%d %d %d",&i,&j,&flux);
f[i][j]=flux;
if(j!=n)
a[i].push_back(j);
else
a[j].push_back(i);
m--;
}
flux=0;
while(bfs())
for(it=fr.begin();it!=fr.end();it++)
{
j=n;
t[n]=*it;
fmin=110001;
while(j!=1)
{
if(f[t[j]][j]+f[j][t[j]]>0)
fmin=min(fmin,f[t[j]][j]+f[j][t[j]]);
else
{
fmin=110001;
break;
}
j=t[j];
}
if(fmin<110001)
{
flux+=fmin;
j=n;
while(j!=1)
{
f[j][t[j]]-=fmin;
j=t[j];
}
}
}
printf("%d\n",flux);
return 0;
}