#include<cstdio>
#include<cstring>
#define N 1001
int cap[N][N],p,q,c;
struct nod
{int x;
nod *n;};
nod *a[N],*r;
int n,m,t[N],mn;
int A()
{int Q[N],p=0,q=0,d[N],v;
bool u[N];
memset(u,0,sizeof(u)),memset(t,0,sizeof(t)),memset(d,0,sizeof(d));
u[1]=Q[0]=1;
while(p<=q)
{v=Q[p++];
for(nod *i=a[v];i;i=i->n)
if(!u[i->x]&&cap[v][i->x]>0)
{Q[++q]=i->x,u[i->x]=1;
t[i->x]=v,d[i->x]=d[v]+1;}}
return t[n]!=0;}
void B()
{int flow=0,j;
while(A())
{for(nod *i=a[n];i;i=i->n)
if(t[i->x])
{mn=0x3f3f3f3f;
for(j=i->x;t[j];j=t[j])
if(mn>cap[t[j]][j])
mn=cap[t[j]][j];
if(mn>cap[i->x][n])
mn=cap[i->x][n];
if(mn<=0)
continue;
cap[i->x][n]-=mn,cap[n][i->x]+=mn;
for(j=i->x;t[j];j=t[j])
cap[t[j]][j]-=mn,cap[j][t[j]]+=mn;
flow+=mn;}}
printf("%d\n",flow);}
int main()
{freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
while(m--)
{scanf("%d%d%d",&p,&q,&c);
r=new nod;
r->x=q,r->n=a[p],a[p]=r;
r=new nod;
r->x=p,r->n=a[q],a[q]=r,cap[p][q]=c;}
B();
return 0;}