#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define vi std::vector<int>
#define vvi std::vector<vi>
#define pi std::pair<int, int>
using namespace std;
const int inf = 1e9;
int n, m;
vvi cap, l;
int bfs(int source, int sink, vi& t){
for(int i=0;i<t.size();i++) t[i] = -1;
t[source] = -2;
std::queue<pi>q;
q.push({source, inf});
while(!q.empty()){
int curr = q.front().first, flow = q.front().second;
q.pop();
for(auto x:l[curr])
if(t[x] == -1 and cap[curr][x]) {
t[x] = curr;
int aux = min(flow, cap[curr][x]);
if(x == sink) return aux;
q.push({x, aux});
}
}
return 0;
}
int flow(int source, int sink){
int ans = 0, aux = 0;
vi t(n + 1);
while(1){
aux = bfs(source, sink, t);
if(aux == 0) break;
ans += aux;
int curr = sink;
while(curr != source){
cap[t[curr]][curr] -= aux;
cap[curr][t[curr]] += aux;
curr = t[curr];
}
}
return ans;
}
void pre(){
l.resize(n + 1);
cap.resize(n + 1);
for(int i=1;i<=n;i++) cap[i].resize(n + 1);
}
int main(){
std::ifstream fin("maxflow.in");
std::ofstream fout("maxflow.out");
fin>>n>>m;
pre();
for(int i=1;i<=m;i++){
int a, b, c;
fin>>a>>b>>c;
l[a].push_back(b);
l[b].push_back(a);
cap[a][b] = c;
}
fout<<flow(1, n);
}