/*                                                                                 `
                                                                                ``  `
                                                                          . `   .g,`
                   Welcome To My Coding Space!                          .MMe  `(F(#~ `.J,
                                                                       `.M/7b. dD.N; (#=#:
                                                                     ``  db (m.#` Wl(@ jF    `
                                            ``    `  `          `   ..+kMMN;_(Y> `(TD  d$..gHN_
                                     `   ``   ......   `  `  ` `..gMB61+1+dK `- `.    .TM@^(d%
                               `` `` ..JggHHMMHHYYTHMMMNmgJ.. .kB6z?1+z1+<dD ..` .  ``.` `.V'
                              ``..+HMBYC1?1+???=?====????1vTHMNe+1+dMB"BMMM% .`je. `.. ..+@`
                            `..gM9C1+?==??==?==?=?===??=??=?1?zTMNeJTHg..``...`.,S._`.` d$  `
                      ` ` .(kBY1+==????=?=??=?=??=???=?=?=?=????+zTMm+?TMm..   ` d[ .``.M}
                       `.(M9++?=????==???=?=??=?=?=?=?=?=?=?===?==1+7Mmx?MN,``..._^`.. (F      `
     ` ` ` ` `  `      (M8++z11==?==??==??=?==?=?=?==??=??=??==??==?=+7Mm<dNg, ` .`.. (#!   `
   ` `    ..(JgH@MMMMMMB1+=??=??=?????==11??1=1?1?=1+=11?1==?=1=??=??11+WNJdMt .``.` J#! `
      .(HHYYC?1+??z>+H8+=??=?=?=???=?=?=z1&z1?==?1<dNs111?==1ux?==?=?==1zdNcW%  ..`. J#~`
     `.WNx<?1?==1=zdMD+=?==?===?=?==?===<dNNx1z??==+WMN+g&&&xdMk1??=1===???MN}`.`.`. J#` `
  `     ?MNc1=1?z?jH8+==?=?==??=jQ21=?=?(M$?WNx<1=zudMMMszOCvTHMmx+?1?z+1?zd#:..`.`. J@       `
     `` .M81==?==>dM<??===?=?=?+dNy+?=?jM@ ` ?WNe+zO>dNcHmJ1+1JMMR1?z??Ne1<d#~.`..`. dF
       (M3+1+?==?jMD+=?z1&&?v1+jMMb+=?1d#!`..``?HNx+?+HR ?Mm+1<dMMp?==<dNc<d#_.`..`.`dF  `
      ,MHmax111=<dNC?=?=(M#ugH9M#W#6+?(M'`.`.... ?WNe<dM: .TNm<dN?Nm<=zzMR+M@` .``.. dF `
   ` ``  _CM$+??1d#<==?=>dM9+?(MF(MI+jMf .`.``.`.. (TNaHr`.`.TNmN:(MR+?zMK(M$` `.`.``dF        `
          J#<=1<jME+1?=1d9Mn1<jN! qN(d@_.`..`.`.`.```-7Y5.....,TB! (MmJ+MH(M: ...`.`.d$`
     `   .M$iggWWMR+1?<dDjMNxjMB  .NgN``..``.`.``....`.d#Y"""YWNg.  .WNxW#J@ .`.`.``.H: `
         _Y""!  .M$jm+?1zd#TNzM}.. ?M% .`..`.`..``.`..  .+NMNg,.?Mm._ ?NMNM$ ..`..``.#    `
                .HPj#z=?<d#_WM#:.JgHH6 .  `.`.`..``.`.`jMMF`.MMN..TN,  ?@jM}`..`.`.`JD   `
           ` `   dbjMI?=+MF`.7XME^_.--,. ..`.``.`..`.`.M#XNgjNdMR. ?N-.  (#~``.``.. d%
              `  d#<WR1z(Mt` (#' (MMBTHNe.`..`..`.`.` .M#UMMMM#W#_. zN.  dF`.`...`..H}  `
                 ?MO(N+?jM:`.M!`.M9N+.-MMR `..`..`.`.`_?MmTMMMwM#~...H: .H}`..`..` (#`
          `  `  ` WNJMR<dN_ JB  dNwMMMMNdM[`.`.`.`.`..  ,TNNggMB! .` ~ `(M `.`.``. dF
                 `.MdMNoW@ `JP `(MKdMMNMdM}`.`..`.`.`.... .??!`.`.`..`..dD .`....`.W'
                   ?MMMMMP `(R`..?MmyUWQMB ..`..`.`.`..`..`..`.`.`_`-.gM#!.`.``.``.@
             `   `` _7NTMN.`.H/`. ,TMMB"! .``.`.`..`.``.``.`..`.`. .,NIdb` .`..`  j$
          `           Wm.M;`._!..`.`...`_`...``..   ...(+ga,`.....``(NjMr`..`... .#:
                      .MpdN_.`. ``.``.`..`..(-JggkWY9YC<>;?Wp .``.` J#>dN, ..``.`dF`
                      `_UmMn .`..`..`..`. JMYT1<;;;>>>>>;>>?Wo ..`. dK1=dN,`..``.MN+
                        .dMMe .`.``.`.`.` d#<;>>>>;>>>>;>>>>(N,`.. -MK1llvWm.   JM?Mp. ` `
                     ` .M9+?Me`.`..`.`.`` JN(>;>>;>>;>>>;>>><db` (kH5lllllzXMm.-NNszWm ` `
                `     (#1+???Hm, ..`..`..`(N:>>>>>;>>>>>;>>><d@_.JNZIlllllllzvTWB6zlJMp      `
                ` `` j@1+==?1zvHm.`...`....Hc<>>>>>>>>>>>>><(W$(M8TIllllllllllllllllzvMo ` `   `
                    (#1?==1?===z?TNa,.` `` (Ne<<>>>>><;><;jgMMY1HK1lllllllllllllllllllJMp `
                   .Ne&g&x1=?=?==?1zTHNmJ-...dNgJ++++&ggMH9=~ .M9Izlllllllllllllllllll1WF    `
                `   _???MK<=??=??1z?(MM@!d#M#Y""""=<!!~```  .d8Illllllll=lll=lllllllzudY `     `
                `       dH<?+uev?=1uMM^  d@vN&.`...`.`.`.-JH91zzl=llllllllllll=lzllzd#'  `  `
                        ,MNMBHNIvjdB(D ` d#=zTNm.....JgHM9Izlllludk=zl=ll=llllllvug#^
                     ` `    `.MmgM=+M$ ` d#zzO1vUUUU9TI=lllzzO1dKT#zOlllll=llll=dM=
                         `   `(Y^ JBdr ` dNmxzIlllllllllllz1ug#= .My1llllllllllzdD `
                           `     j@1dR ``(#~THaxl=lzzlzzzugW"!` ``,Nzlzz=lllllzd#:  `
                            ` ` .#z=d# ``(#_` .7THWQkWHB"^ ` `   ` ?NsIzzlll=ljM\
                       `   ``  (M6zldN_` .M| `    ``    `           .WezllzllzH% `` `
                     `    `  .+#Czl=dM;`  dR                    `     4m+zll1dD
                        `  `.d@1llzvdMb   ,#   `                   `   ?Wmxzdf                     */
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
//---------------------------------------------------------------------------------------------------
#define INF INT_MAX/2
struct DirectedMaxflow {
    struct edge { int to, cap, rev; edge(int t, int c, int r) { to = t; cap = c; rev = r; } };
    int V; vector<vector<edge>> G; vector<int> itr, level;

    DirectedMaxflow(int V) : V(V) { G.assign(V, vector<edge>()); }
    void add_edge(int from, int to, int cap) {
        G[from].push_back(edge(to, cap, (int)G[to].size()));
        G[to].push_back(edge(from, 0, (int)G[from].size() - 1));
    }

    void bfs(int s) {
        level.assign(V, -1); queue<int> q; level[s] = 0; q.push(s);
        while (!q.empty()) {
            int v = q.front(); q.pop();
            for (auto &e : G[v]) if (e.cap > 0 and level[e.to] < 0) {
                level[e.to] = level[v] + 1; q.push(e.to);
            }
        }
    }

    int dfs(int v, int t, int f) {
        if (v == t) return f;
        for (int& i = itr[v]; i < (int)G[v].size(); ++i) {
            edge& e = G[v][i];
            if (e.cap > 0 and level[v] < level[e.to]) {
                int d = dfs(e.to, t, min(f, e.cap));
                if (d > 0) { e.cap -= d; G[e.to][e.rev].cap += d; return d; }
            }
        }
        return 0;
    }

    int run(int s, int t) {
        int ret = 0, f;
        while (bfs(s), level[t] >= 0) { itr.assign(V, 0); while ((f = dfs(s, t, INF)) > 0) ret += f; }
        return ret;
    }
};


int V, E;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> V >> E;

    DirectedMaxflow mf(V);
    rep(i, 0, E) {
        int a, b, c; cin >> a >> b >> c;
        mf.add_edge(a, b, c);
    }

    cout << mf.run(0, V - 1) << endl;
}

Measured memory_bytes: 3208