#include<cstdio>
using namespace std;
int ic,sf,coada[1001],pred[1001],a[1001][1001];
bool viz[1001],marc[1001];
int n,m;
int valmin(int nod){
int val;
//nod=coada[sf];
val=550000001;
while(pred[nod]!=0){
if(a[pred[nod]][nod]<val)
val=a[pred[nod]][nod];
nod=pred[nod];
}
return val;
}
void update(int nod){
int val,nnod;
val=550000001;
nnod=nod;
while(pred[nod]!=0){
if(a[pred[nod]][nod]<val)
val=a[pred[nod]][nod];
nod=pred[nod];
}
//nod=coada[sf];
nod=nnod;
while(pred[nod]!=0){
a[pred[nod]][nod]-=val;
a[nod][pred[nod]]+=val;
nod=pred[nod];
}
}
bool bfs(int nod){
ic=1;sf=1;
coada[ic]=nod;
viz[nod]=true;
bool boolfin=false;
while(ic<=sf){
for(int i=1;i<n;i++)
if(a[coada[ic]][i]!=0&&viz[i]==false){
sf++;
coada[sf]=i;
viz[i]=true;
pred[i]=coada[ic];
if(marc[i]==true&&a[i][n]>0){
boolfin=true;
}
}
ic++;
}
return boolfin;
}
int main(){
int a1,b,c;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a1,&b,&c);
a[a1][b]=c;
if(b==n)
marc[a1]=true;
}
bool pp=true;
while(bfs(1)==true){
for(int i=1;i<=n;i++)
viz[i]=false;
for(int i=1;i<n;i++)
if(marc[i]==true){
pred[n]=i;
update(n);
}
}
int tot=0;
for(int i=1;i<=n;i++)
tot+=a[i][1];
printf("%d",tot);
return 0;
}