#include <bits/stdc++.h>
#define dbg(x) //cerr<<#x": "<<x<<"\n"
#define dbg_v(x, n) do{cerr<<#x"[]: ";for(int _=0;_<n;++_)cerr<<x[_]<<" ";cerr<<'\n';}while(0)
#define dbg_ok cerr<<"OK!\n"
#define DMAX 500
#define NMAX 1
#define MMAX 1
using namespace std;
int n, k, x, src, dest, m;
string s;
int from, to, cost;
int c[DMAX][DMAX], f[DMAX][DMAX], use[DMAX];
int c1[DMAX][DMAX], f1[DMAX][DMAX];
int flow;
vector <int> v[DMAX];
int dfs(int node, int flow)
{
dbg(node);
if(flow == 0)
return 0;
if(node == dest)
return flow;
for(int i = 1; i <= n; i++)
{
if(use[i])
continue;
if(f[node][i] < c[node][i])
{
int to_send = min(flow, c[node][i] - f[node][i]);
use[i] = 1;
int recv = dfs(i, to_send);
f[node][i] += recv;
f1[i][node] -= recv;
if(recv > 0)
return recv;
}
else
if(f1[node][i] < c1[node][i])
{
int to_send = min(flow, c1[node][i] - f1[node][i]);
use[i] = 1;
int recv = dfs(i, to_send);
f1[node][i] += recv;
f[i][node] -= recv;
if(recv > 0)
return recv;
}
}
return 0;
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdin);
//ios_base::sync_with_stdio(false);
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
cin >> from >> to >> cost;
c[from][to] = cost;
c1[to][from] = 0;
}
//cin >> src >> dest;
src = 1;
dest = n;
int fl = dfs(src, 100000);
while(fl > 0){
memset(use, 0, sizeof use);
dbg(fl);
flow += fl;
fl = dfs(src, 100000);
if(flow > 10)
break;
}
cout << flow << '\n';
}