program flux_brut;
var f,g:text;
maxf,min,pas,k,p,n,m,i,j,c,x,y,s,d:longint;
a:array[1..1000,1..1000] of longint;
viz,cd,pred:array[1..1000] of integer;
v:array[1..5000] of integer;
bufin,bufout:array[1..1 shl 17] of byte;
procedure bfs(nod,mark:integer);
var p,i,st,sf:longint;
begin
st:=0; sf:=1; cd[1]:=nod; pred[nod]:=0; viz[nod]:=mark;
while st<sf do
begin
inc(st);
for i:=1 to n do
begin
if a[cd[st],i]>0 then
if viz[i]<>mark then
begin
inc(sf);
cd[sf]:=i;
viz[cd[sf]]:=mark;
pred[cd[sf]]:=cd[st];
end;
end;
end;
end;
function pot(sursa,destinatie,mark:longint):boolean;
begin
bfs(1,mark);
if viz[destinatie]=mark then pot:=true
else pot:=false;
end;
begin
assign(f,'maxflow.in'); reset(f);
assign(g,'maxflow.out'); rewrite(g);
settextbuf(f,bufin);
settextbuf(g,bufout);
readln(f,n,m);
maxf:=0;
for i:=1 to m do
begin
readln(f,x,y,c);
a[x,y]:=c;
end;
pas:=1;
while pot(1,n,pas) do
begin
p:=n;
i:=0;
min:=maxlongint;
while p<>0 do
begin
inc(i);
v[i]:=p;
p:=pred[p];
end;
for j:=i downto 2 do
if a[v[j],v[j-1]]<min then min:=a[v[j],v[j-1]];
for j:=i downto 2 do
begin
a[v[j],v[j-1]]:=a[v[j],v[j-1]]-min;
a[v[j-1],v[j]]:=a[v[j-1],v[j]]+min;
end;
inc(pas);
maxf:=maxf+min;
end;
writeln(g,maxf);
close(f); close(g);
end.