#include <fstream>
#include <vector>
#include <deque>
using namespace std;
vector <int> V[1005];
vector <int> tata;
int cap[1005][1005];
deque <pair<int,int>> D;
int flow_bfs(int s,int t)
{
tata.clear();
tata.resize(1001,-1);
tata[s]=-2;
D.clear();
D.push_back({s,1000000000});
while(!D.empty())
{
int nod=D.front().first;
int flow=D.front().second;
D.pop_front();
for(auto x:V[nod])
{
if(tata[x]==-1 && cap[nod][x])
{
tata[x]=nod;
int new_flow=min(flow,cap[nod][x]);
if(x==t)
return new_flow;
D.push_back({x,new_flow});
}
}
}
return 0;
}
int maxflow(int s,int t)
{
int flow=0;
int new_flow;
while(new_flow=flow_bfs(s,t))
{
flow+=new_flow;
int current_nod=t;
while(current_nod!=s)
{
int prev=tata[current_nod];
cap[prev][current_nod]-=new_flow;
cap[current_nod][prev]+=new_flow;
current_nod=prev;
}
}
return flow;
}
int main()
{
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,a,b,c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>a>>b>>c;
cap[a][b]=c;
V[a].push_back(b);
V[b].push_back(a);
}
fout<<maxflow(1,n);
return 0;
}