#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#define NMAX 1007
#define INF 1 << 30
using namespace std;
queue < int > q;
vector < int > v[NMAX];
int Cap[NMAX][NMAX], dad[NMAX];
int n, m;
int bfs(){
while(! q.empty())
q.pop();
q.push(1);
dad[1] = -2;
while(!q.empty() && dad[n] == -1){
int Nod = q.front();
q.pop();
for(int i = 0; i < v[Nod].size(); ++i){
int it = v[Nod][i];
if(dad[it] == -1 && Cap[Nod][it] > 0){
dad[it] = Nod;
q.push(it);
if(it == n)
return 1;
}
}
}
return 0;
}
int main(){
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
v[a].push_back(b);
v[b].push_back(a);
Cap[a][b] += c;
}
int MaxFlow = 0;
memset(dad, -1, sizeof(dad));
while(bfs()){
int Nod = n, Min = INF;
while(Nod > 1){
Min = min(Min, Cap[dad[Nod]][Nod]);
Nod = dad[Nod];
}
MaxFlow += Min;
Nod = n;
while(Nod > 1){
Cap[dad[Nod]][Nod] -= Min;
Nod = dad[Nod];
}
memset(dad, -1, sizeof(dad));
}
printf("%d\n", MaxFlow);
return 0;
}