#include <bits/stdc++.h>
using namespace std;
#define SERVER 0
const string nameFile="maxflow";
ifstream in (nameFile+".in");
ofstream out(nameFile+".out");
typedef pair<int, int> Pii;
#if (SERVER)
#define in cin
#define out cout
#endif
const int nmax=1e3;
const int oo=1e9;
int n, m, x, y, z;
vector <int> muchii[nmax+2];
int parent[nmax+2];
int capacity[nmax+2][nmax+2];
int ffLow;
int source=1, sink;
bool bfs(){
bool ok=false;
fill(parent+1, parent+n+1, -1);
parent[source]=-2;
queue <Pii> q;
q.push({source, oo});
while(!q.empty()){
Pii per=q.front();
q.pop();
int nod=per.first;
for(auto &x:muchii[nod])
if(parent[x]==-1&&capacity[nod][x]){
parent[x]=nod;
int newFlow=min(per.second, capacity[nod][x]);
if(x==sink)
ok=true;
else
q.push({x, newFlow});
}
}
return ok;
}
void flow(){
while(bfs()){
for(auto &x:muchii[sink]){
if(parent[x]!=-1&&capacity[x][sink]){
int flowTemp=capacity[x][sink];
int nodAct=x;
while(nodAct!=source&&flowTemp!=0){
flowTemp=min(flowTemp, capacity[parent[nodAct]][nodAct]);
nodAct=parent[nodAct];
}
if(flowTemp==0)
continue;
ffLow+=flowTemp;
capacity[x][sink]-=flowTemp;
capacity[sink][x]+=flowTemp;
nodAct=x;
while(nodAct!=source){
capacity[parent[nodAct]][nodAct]-=flowTemp;
capacity[nodAct][parent[nodAct]]+=flowTemp;
nodAct=parent[nodAct];
}
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
in>>n>>m;
sink=n;
for(int i=1; i<=m; i++){
in>>x>>y>>z;
muchii[x].push_back(y);
muchii[y].push_back(x);
capacity[x][y]=z;
}
flow();
out<<ffLow<<"\n";
return 0;
}