#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int nmax=1000, inf=(1<<30)-1;
vector <int> g[nmax+1];
int f[nmax+1][nmax+1], t[nmax+1];
queue <int> q;
int main(){
int n,m;
fin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
fin>>x>>y>>z;
g[x].push_back(y);
g[y].push_back(x);
f[x][y]=z;
}
int ok=1,sol=0;
while(ok==1){
for(int i=1;i<=n;i++){
t[i]=0;
}
q.push(1);
while(q.empty()==0){
int x=q.front();
q.pop();
for(int i=0;i<int(g[x].size());i++){
int xn=g[x][i];
if(f[x][xn]>0&&t[xn]==0){
t[xn]=x;
q.push(xn);
}
}
}
if(t[n]!=0){
ok=1;
int p=n,mini=inf;
while(p!=1){
if(f[t[p]][p]<mini){
mini=f[t[p]][p];
}
p=t[p];
}
p=n;
while(p!=1){
f[t[p]][p]-=mini;
f[p][t[p]]+=mini;
p=t[p];
}
sol+=mini;
}else{
ok=0;
}
}
fout<<sol<<"\n";
return 0;
}