#include <bits/stdc++.h>
using namespace std;
const int inf=1e9;
vector<int> g[1010];
queue<int> q;
int tata[1010],cap_flow[1010][1010],sursa,dest,n;
char vaz[1010];
int bfs()
{
for(int i=1;i<=n;i++) vaz[i]=0;
q.push(sursa);
vaz[sursa]=1;
while(!q.empty())
{
int nod=q.front();
q.pop();
for(vector<int>::iterator it=g[nod].begin();it!=g[nod].end();it++)
if(!vaz[*it] && cap_flow[nod][*it])
{
tata[*it]=nod;
vaz[*it]=1;
if(*it!=dest) q.push(*it);
}
}
return vaz[dest];
}
int main()
{
freopen("maxflow.in", "r" ,stdin);
freopen("maxflow.out", "w", stdout);
int m,x,y,c,flux=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&c);
g[x].push_back(y);
g[y].push_back(x);
cap_flow[x][y]+=c;
}
sursa=1;dest=n;
while(bfs())
{
for(vector<int>::iterator it=g[dest].begin();it!=g[dest].end();it++)
if(vaz[*it] && cap_flow[*it][dest])
{
tata[dest]=*it;
int s=inf;
for(int nod=dest;nod!=sursa;nod=tata[nod]) s=min(s,cap_flow[tata[nod]][nod]);
for(int nod=dest;nod!=sursa;nod=tata[nod])
{
cap_flow[tata[nod]][nod]-=s;
cap_flow[nod][tata[nod]]+=s;
}
flux+=s;
}
}
printf("%d",flux);
return 0;
}