#include <cstdio>
#include <vector>
#define nm 1010
#define df(n,m) (c[n][m]-fl[n][m])
using namespace std;
FILE *f=fopen("maxflow.in","r");
FILE *g=fopen("maxflow.out","w");
int n,m,i,x,y,z,nd,flow,mn;
int c[nm][nm],fl[nm][nm];
vector <int> a[nm];
int q[nm],tt[nm];
bool bf[2*nm];
int bfs()
{
int i,j,x;
q[0]=1;
q[1]=1;
for (i=1;i<=n;i++)
bf[i]=false;
bf[1]=true;
for (i=1;i<=q[0];i++)
{
x=q[i];
if (x==n) continue;
for (j=0;j<a[x].size();j++)
{
if (bf[a[x][j]] || c[x][a[x][j]]==fl[x][a[x][j]]) continue;
tt[a[x][j]]=x;
bf[a[x][j]]=true;
q[++q[0]]=a[x][j];
}
}
return bf[n];
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&z);
a[x].push_back(y);
a[y].push_back(x);
c[x][y]=z;
}
for (flow=0;bfs();)
for (i=0;i<a[n].size();i++)
{
nd=a[n][i];
if (bf[nd]==false)
continue;
tt[n]=nd;
for (nd=n,mn=df(tt[nd],nd);nd!=1;nd=tt[nd])
mn=min(mn,df(tt[nd],nd));
if (mn==0) continue;
flow+=mn;
for (nd=n;nd!=1;nd=tt[nd])
{
fl[tt[nd]][nd]+=mn;
fl[nd][tt[nd]]-=mn;
}
}
fprintf(g,"%d",flow);
fclose(g);
return 0;
}