const dx:array[1..12] of longint=(1,1,2,2,-1,-1,-2,-2,2,2,-2,-2);
dy:array[1..12] of longint=(2,-2,1,-1,2,-2,1,-1,2,-2,2,-2);
var x,y:longint;
procedure bfs(x,y:longint);
var n,m,head,tail,i,j,k,t:longint;
h:array[-5..200005,1..3] of longint;
bz:array[-5..405,-5..405] of boolean;
a:array[-5..405,-5..405] of longint;
s:string;
begin
n:=x;m:=y;
fillchar(bz,sizeof(bz),true);
head:=1;tail:=1;h[1,1]:=x;h[1,2]:=y;h[1,3]:=0;bz[x,y]:=false;
while head<=tail do
begin
for i:=1 to 12 do
begin
x:=h[head,1]+dx[i];y:=h[head,2]+dy[i];
if (x<1) or (y<1) or (x>n) or (y>m) then continue;
if not bz[x,y] then continue;
inc(tail);
h[tail,1]:=x;h[tail,2]:=y;h[tail,3]:=h[head,3]+1;bz[x,y]:=false;
if (x=1) and (y=1) then
begin
writeln(h[head,3]+1);
exit;
end;
end;
inc(head);
end;
end;
begin
readln(x,y);
bfs(x,y);
readln(x,y);
bfs(x,y);
end.