#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
#define maxn 0x7fffffff
int n, m;
int gra[210][210] = {0};
int pre[210] = {0};
int flow[210] = {0};
queue<int>qu;
int flowMax = 0;
int read()
{
int x = 0, w = 1;
char ch = getchar();
while(ch <='0' || ch > '9')
{
if(ch == '-') w = -1;
ch = getchar();
}
while(ch <= '9' && ch >= '0')
{
x = x * 10 + ch - '0';
ch = getchar();
}
return x * w;
}
int bfs(int s, int t)
{
while(!qu.empty())
{
qu.pop();
}
for(int i = 1; i <= n; i++)
{
pre[i] = -1;
}
pre[s] = 0;
flow[s] = maxn;
qu.push(s);
while(!qu.empty())
{
int now = qu.front();
qu.pop();
if(now == t) break;
for(int i = 1; i <= n; i++)
{
if(gra[now][i] > 0 && pre[i] == -1)
{
pre[i] = now;
flow[i] = min(flow[now], gra[now][i]);
qu.push(i);
}
}
}
if(pre[t] == -1)
{
return -1;
}
return flow[t];
}
void EK(int s, int t)
{
flowMax = 0;
memset(flow, 0, sizeof(flow));
int increase = 0;
while(increase = bfs(1, n))
{
if(increase == -1)
{
break;
}
int now = t;
while(now != s)
{
gra[pre[now]][now] -= increase;
gra[now][pre[now]] += increase;
now = pre[now];
}
flowMax += increase;
}
}
int main()
{
while(scanf("%d %d", &m, &n) != EOF)
{
memset(gra, 0, sizeof(gra));
for(int i = 1; i <= m; i++)
{
int a = read();
int b = read();
int c = read();
gra[a][b] += c;
}
EK(1, n);
printf("%d\n", flowMax);
}
return 0;
}