#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin ("maxflow.in");
ofstream cout ("maxflow.out");
vector <int> lista[1005];
int cap[1005][1005];
int flux[1005][1005];
void adaug(int x, int y, int c)
{
lista[x].push_back(y);
lista[y].push_back(x);
cap[x][y] = c;
}
int viz[1005];
queue <int> q;
int prv[1005], n;
int bfs(int s, int d)
{
int i;
for (i = 1; i <= n; i++)
viz[i] = prv[i] = 0;
viz[s] = 1;
q.push(s);
while (!q.empty())
{
int x = q.front();
q.pop();
for (int i = 0; i < lista[x].size(); i++)
{
int y = lista[x][i];
if (!viz[y] && flux[x][y] < cap[x][y])
{
prv[y] = x;
q.push(y);
viz[y] = 1;
}
}
}
if (prv[d])
return 1;
return 0;
}
int main()
{
int m, i;
cin >> n;
cin >> m;
for (i = 1; i <= m; i++)
{
int x, y, c;
cin >> x >> y >> c;
adaug(x, y, c);
}
int flow = 0;
int s = 1, d = n;
while (bfs(s, d))
{
int mini = 2e9;
for (i = d; i != s; i = prv[i])
mini = min(mini, cap[prv[i]][i] - flux[prv[i]][i]);
for (i = d; i != s; i = prv[i])
{
flux[prv[i]][i] += mini;
flux[i][prv[i]] -= mini;
}
flow += mini;
}
cout << flow;
return 0;
}