#include <iostream>
#include <queue>
using namespace std;
const int maxn = 220;
const int inf = INT_MAX;
int G[maxn][maxn], flow[maxn], pre[maxn];
int n, m;
queue <int> q;
int bfs(int s, int t) {
while (!q.empty()) q.pop();
memset(pre, -1, sizeof(pre));
pre[s] = 0, flow[s] = inf;
q.push(s);
while (!q.empty()) {
int p = q.front(); q.pop();
if (p == t)break;
for (int u = 1; u <= n; u++) {
if (u != s && G[p][u] > 0 && pre[u] == -1) {
pre[u] = p;
flow[u] = min(flow[p], G[p][u]);
q.push(u);
}
}
}
if (pre[t] == -1)return -1;
return flow[t];
}
int EK(int s,int t) {
int delta = 0, tot = 0;
while (true) {
delta = bfs(s, t);
if (delta == -1) break;
int p = t;
while (p != s) {
G[pre[p]][p] -= delta;
G[p][pre[p]] += delta;
p = pre[p];
}
tot += delta;
}
return tot;
}
int main() {
cin >> m >> n;
int u, v, w;
memset(G, 0, sizeof(G));
memset(flow, 0, sizeof(flow));
for (int i = 0; i < m; i++) {
cin >> u >> v >> w;
G[u][v] += w;
}
cout << EK(1, n) << endl;
return 0;
}