const nmax=1024;
const mn=100000;
const inf=100000000;
var f,c,g:array[1..nmax,1..nmax] of longint;
a,q,viz,m:array[0..mn] of longint;
s,viz2,x,y,d:array[0..mn] of longint;
h1,h:text;
flux,cost,i,n,p:longint;
function min(x,y:longint):longint;
begin
if x>y then min:=y
else min:=x;
end;
function bfs:boolean;
var st,dr,x,y,i:integer;
begin
st:=1;
dr:=1;
q[st]:=1;
viz[1]:=-1;
m[1]:=inf;
for i:=2 to n do
viz[i]:=0;
while st<=dr do
begin
x:=q[st];
for i:=1 to d[x] do
begin
y:=g[x,i];
if (viz[y]=0) and(f[x,y]<c[x,y]) then
begin
viz[y]:=x;
m[y]:=min(m[x],c[x,y]-f[x,y]);
dr:=dr+1;
q[dr]:=y;
end;
st:=st+1
end;
end;
if viz[n]<>0 then bfs:=true
else bfs:=false ;
end;
begin
assign(h,'maxflow.in');
reset(h);
assign(h1,'maxflow.out');
rewrite(h1);
readln(h,n,p);
for i:=1 to p do
begin
readln(h,x[i],y[i],cost);
d[x[i]]:=d[x[i]]+1;
d[y[i]]:=d[y[i]]+1;
g[x[i],d[x[i]]]:=y[i];
g[y[i],d[y[i]]]:=x[i];
c[x[i],y[i]]:=cost;
c[y[i],x[i]]:=cost;
end;
while bfs do
begin
i:=n;
while i>1 do
begin
f[viz[i],i]:=f[viz[i],i]+m[n];
f[i,viz[i]]:=f[i,viz[i]]-m[n];
i:=viz[i];
flux:=flux+m[n];
end;
end;
writeln(h1,flux);
close(h1);
end.