#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 2e5+5;
int n, m;
struct FlowEdge {
int v, u;
long long cap, flow = 0;
FlowEdge(int v, int u, long long cap) : v(v), u(u), cap(cap) {}
};
struct Dinic {
const long long flow_inf = 1e18;
vector<FlowEdge> edges;
vector<vector<int>> adj;
int n, m = 0;
int s, t;
vector<int> level, ptr;
queue<int> q;
Dinic(int n, int s, int t) : n(n), s(s), t(t) {
adj.resize(n);
level.resize(n);
ptr.resize(n);
}
void add_edge(int v, int u, long long cap) {
edges.emplace_back(v, u, cap);
edges.emplace_back(u, v, 0);
adj[v].push_back(m);
adj[u].push_back(m + 1);
m += 2;
}
bool bfs() {
while (!q.empty()) {
int v = q.front();
q.pop();
for (int id : adj[v]) {
if (edges[id].cap == edges[id].flow)
continue;
if (level[edges[id].u] != -1)
continue;
level[edges[id].u] = level[v] + 1;
q.push(edges[id].u);
}
}
return level[t] != -1;
}
long long dfs(int v, long long pushed) {
if (pushed == 0)
return 0;
if (v == t)
return pushed;
for (int& cid = ptr[v]; cid < (int)adj[v].size(); cid++) {
int id = adj[v][cid];
int u = edges[id].u;
if (level[v] + 1 != level[u])
continue;
long long tr = dfs(u, min(pushed, edges[id].cap - edges[id].flow));
if (tr == 0)
continue;
edges[id].flow += tr;
edges[id ^ 1].flow -= tr;
return tr;
}
return 0;
}
long long flow() {
long long f = 0;
while (true) {
fill(level.begin(), level.end(), -1);
level[s] = 0;
q.push(s);
if (!bfs())
break;
fill(ptr.begin(), ptr.end(), 0);
while (long long pushed = dfs(s, flow_inf)) {
f += pushed;
}
}
return f;
}
};
void solve()
{
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m;
Dinic ezskip(n, 0, n-1);
for(int i=1; i<=m; i+=1)
{
int x,y,w; cin>>x>>y>>w;
// cout<<x-1<<" "<<y-1<<" "<<w<<'\n';
ezskip.add_edge(x-1, y-1, w);
}
cout<<ezskip.flow()<<'\n';
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBzaXooeCkgKGludCkoeC5zaXplKCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIGRlYnVnX2Fycih4LGxlbikgZm9yKGludCBfPTE7IF88PWxlbjsgXysrKSBjb3V0PDx4W19dPDwiICI7IGNvdXQ8PCdcbic7CiNkZWZpbmUgZGVidWcoeCkgY291dDw8J1xuJzw8I3g8PCI6ICI8PHg8PCdcbic7CmNvbnN0IGludCBtYXhOID0gMmU1KzU7CgppbnQgbiwgbTsKCnN0cnVjdCBGbG93RWRnZSB7CiAgICBpbnQgdiwgdTsKICAgIGxvbmcgbG9uZyBjYXAsIGZsb3cgPSAwOwogICAgRmxvd0VkZ2UoaW50IHYsIGludCB1LCBsb25nIGxvbmcgY2FwKSA6IHYodiksIHUodSksIGNhcChjYXApIHt9Cn07CgpzdHJ1Y3QgRGluaWMgewogICAgY29uc3QgbG9uZyBsb25nIGZsb3dfaW5mID0gMWUxODsKICAgIHZlY3RvcjxGbG93RWRnZT4gZWRnZXM7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGFkajsKICAgIGludCBuLCBtID0gMDsKICAgIGludCBzLCB0OwogICAgdmVjdG9yPGludD4gbGV2ZWwsIHB0cjsKICAgIHF1ZXVlPGludD4gcTsKCiAgICBEaW5pYyhpbnQgbiwgaW50IHMsIGludCB0KSA6IG4obiksIHMocyksIHQodCkgewogICAgICAgIGFkai5yZXNpemUobik7CiAgICAgICAgbGV2ZWwucmVzaXplKG4pOwogICAgICAgIHB0ci5yZXNpemUobik7CiAgICB9CgogICAgdm9pZCBhZGRfZWRnZShpbnQgdiwgaW50IHUsIGxvbmcgbG9uZyBjYXApIHsKICAgICAgICBlZGdlcy5lbXBsYWNlX2JhY2sodiwgdSwgY2FwKTsKICAgICAgICBlZGdlcy5lbXBsYWNlX2JhY2sodSwgdiwgMCk7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayhtKTsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKG0gKyAxKTsKICAgICAgICBtICs9IDI7CiAgICB9CgogICAgYm9vbCBiZnMoKSB7CiAgICAgICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICAgICAgaW50IHYgPSBxLmZyb250KCk7CiAgICAgICAgICAgIHEucG9wKCk7CiAgICAgICAgICAgIGZvciAoaW50IGlkIDogYWRqW3ZdKSB7CiAgICAgICAgICAgICAgICBpZiAoZWRnZXNbaWRdLmNhcCA9PSBlZGdlc1tpZF0uZmxvdykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIGlmIChsZXZlbFtlZGdlc1tpZF0udV0gIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICBsZXZlbFtlZGdlc1tpZF0udV0gPSBsZXZlbFt2XSArIDE7CiAgICAgICAgICAgICAgICBxLnB1c2goZWRnZXNbaWRdLnUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBsZXZlbFt0XSAhPSAtMTsKICAgIH0KCiAgICBsb25nIGxvbmcgZGZzKGludCB2LCBsb25nIGxvbmcgcHVzaGVkKSB7CiAgICAgICAgaWYgKHB1c2hlZCA9PSAwKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBpZiAodiA9PSB0KQogICAgICAgICAgICByZXR1cm4gcHVzaGVkOwogICAgICAgIGZvciAoaW50JiBjaWQgPSBwdHJbdl07IGNpZCA8IChpbnQpYWRqW3ZdLnNpemUoKTsgY2lkKyspIHsKICAgICAgICAgICAgaW50IGlkID0gYWRqW3ZdW2NpZF07CiAgICAgICAgICAgIGludCB1ID0gZWRnZXNbaWRdLnU7CiAgICAgICAgICAgIGlmIChsZXZlbFt2XSArIDEgIT0gbGV2ZWxbdV0pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgbG9uZyBsb25nIHRyID0gZGZzKHUsIG1pbihwdXNoZWQsIGVkZ2VzW2lkXS5jYXAgLSBlZGdlc1tpZF0uZmxvdykpOwogICAgICAgICAgICBpZiAodHIgPT0gMCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBlZGdlc1tpZF0uZmxvdyArPSB0cjsKICAgICAgICAgICAgZWRnZXNbaWQgXiAxXS5mbG93IC09IHRyOwogICAgICAgICAgICByZXR1cm4gdHI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGxvbmcgbG9uZyBmbG93KCkgewogICAgICAgIGxvbmcgbG9uZyBmID0gMDsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBmaWxsKGxldmVsLmJlZ2luKCksIGxldmVsLmVuZCgpLCAtMSk7CiAgICAgICAgICAgIGxldmVsW3NdID0gMDsKICAgICAgICAgICAgcS5wdXNoKHMpOwogICAgICAgICAgICBpZiAoIWJmcygpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGZpbGwocHRyLmJlZ2luKCksIHB0ci5lbmQoKSwgMCk7CiAgICAgICAgICAgIHdoaWxlIChsb25nIGxvbmcgcHVzaGVkID0gZGZzKHMsIGZsb3dfaW5mKSkgewogICAgICAgICAgICAgICAgZiArPSBwdXNoZWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGY7CiAgICB9Cn07CnZvaWQgc29sdmUoKQp7CgkKfQoKaW50MzJfdCBtYWluKCkKewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsKCWNpbj4+bj4+bTsKCURpbmljIGV6c2tpcChuLCAwLCBuLTEpOwoJZm9yKGludCBpPTE7IGk8PW07IGkrPTEpCgl7CgkJaW50IHgseSx3OyBjaW4+Png+Pnk+Pnc7CgkJLy8gY291dDw8eC0xPDwiICI8PHktMTw8IiAiPDx3PDwnXG4nOwoJCWV6c2tpcC5hZGRfZWRnZSh4LTEsIHktMSwgdyk7Cgl9Cgljb3V0PDxlenNraXAuZmxvdygpPDwnXG4nOwp9