#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int costs[1005][1005], tasu[1005], q[1005];
vector <int> v[1005];
void bfs(int s, int t)
{
int start = 0, avans = 0, aux, aux2, i;
q[avans ++] = s;
tasu[s] = -2;
while(avans >= start && tasu[t] == -1)
{
for(aux = q[start ++], i = 0; i < v[aux].size(); ++ i)
{
aux2 = v[aux][i];
if(tasu[aux2] == -1 && costs[aux][aux2])
{
q[avans ++] = aux2;
tasu[aux2] = aux;
}
}
}
}
int rez(int n, int s, int t)
{
int flow = 0, aux, cmin, aux2, aux3;
while(1)
{
memset(tasu, -1, sizeof(tasu));
bfs(s, t);
if(tasu[t] == -1)
break;
for(aux = 1; aux <= n; ++ aux)
if(costs[aux][t] && tasu[aux] != -1)
{
cmin = costs[aux][t];
for(aux2 = aux, aux3 = tasu[aux2]; aux3 > 0; aux2 = aux3, aux3 = tasu[aux2])
cmin = min(cmin, costs[aux3][aux2]);
if(cmin)
{
costs[aux][t] -= cmin;
costs[t][aux] += cmin;
for(aux2 = aux, aux3 = tasu[aux2]; aux3 >= 0; aux2 = aux3, aux3 = tasu[aux2])
{
costs[aux3][aux2] -= cmin;
costs[aux2][aux3] += cmin;
}
flow += cmin;
}
}
}
return flow;
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int n, s, t, m, i, x, y, c;
scanf("%d%d", &n, &m);
s = 1, t = n;
for(i = 1; i <= m; i++)
{
scanf("%d%d%d", &x, &y, &c);
costs[x][y] += c;
v[x].push_back(y);
v[y].push_back(x);
}
printf("%d", rez(n, s, t));
return 0;
}