#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
const int inf = INT_MAX;
int n, m, fl[1005][1005], cost[1005][1005], fr[1005], t[1005];
vector<int> v[1005];
bool bfs()
{
int num[1005];
for(int i = 0; i <= n; i ++) fr[i] = num[i] = 0;
num[0] = num[1] = 1; fr[1] = 1;
for(int i = 1; i <= num[0]; i ++)
{
int nod = num[i];
if(nod == n) continue;
for(auto x : v[nod])
{
if(cost[nod][x] == fl[nod][x] || fr[x])
continue;
fr[x] = 1; t[x] = nod;
num[++ num[0]] = x;
}
}
return fr[n];
}
int main()
{
f >> n >> m;
for(int i = 1; i <= m; i ++)
{
int x, y, c; f >> x >> y >> c;
cost[x][y] += c;
v[x].push_back(y);
v[y].push_back(x);
}
int flow, fmin;
for(flow = 0; bfs();)
for(auto x : v[n])
{
if(cost[x][n] == fl[x][n] || !fr[x])
continue;
t[n] = x;
fmin = inf;
for(int i = n; i != 1; i = t[i])
fmin = min(fmin, cost[t[i]][i] - fl[t[i]][i]);
if(!fmin) continue;
for(int i = n; i != 1; i = t[i])
{
fl[t[i]][i] += fmin;
fl[i][t[i]] -= fmin;
}
flow += fmin;
}
g << flow;
return 0;
}