const infile='maxflow.in';
outfile='maxflow.out';
maxn=1001;
maxm=5001;
sursa=1;
infinit=maxlongint;
var a:array[1..maxn,0..maxn]of longint;
c,f:array[1..maxn,1..maxn]of longint;
tata,q,cf:array[1..maxn]of longint;
n,m,destin:longint;
fmax:longint;
procedure citire;
var i,j,k:longint;
begin
assign(input,infile); reset(input); readln(n,m);
while(m>0)do begin
readln(i,j,k); dec(m); c[i,j]:=k;
inc(a[i,0]); a[i,a[i,0]]:=j;
end;
close(input);
end;
function minim(x,y:longint):longint;
begin
if(x<y)then minim:=x
else minim:=y;
end;
function bf:longint;
var ic,sf,i,x:longint;
begin
for i:=2 to n do begin cf[i]:=0; tata[i]:=0; end;
tata[1]:=-1; cf[sursa]:=infinit;
ic:=1; sf:=1; q[sf]:=sursa;
while(ic<=sf)and(cf[destin]=0)do begin
x:=q[ic];
for i:=1 to a[x,0]do
if(c[x,a[x,i]]-f[x,a[x,i]]>0)and(tata[a[x,i]]=0)then begin
tata[a[x,i]]:=x;
cf[a[x,i]]:=minim(cf[x],c[x,a[x,i]]-f[x,a[x,i]]);
inc(sf); q[sf]:=a[x,i];
end;
inc(ic);
end;
bf:=cf[destin];
end;
procedure solve;
var v,min:longint;
begin
fmax:=0; destin:=n;
repeat
min:=bf;
if(min=0)then
else begin
inc(fmax,min);
v:=destin;
while(v<>sursa)do begin
inc(f[tata[v],v],min); dec(f[v,tata[v]],min);
v:=tata[v];
end;
end;
until min=0;
end;
procedure scrie;
begin
assign(output,outfile); rewrite(output); write(fmax);
close(output);
end;
begin
citire; solve; scrie;
end.