1. 

/**
* link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=10&page=show_problem&problem=749
* ACM 808 Bee Breeding :)
* Status: Accepted
* Time: 0.640
* @author Christoph Miesel
*/

import java.io.*;
import java.util.*;
public class BeeBreeding
{
static int distance(int x, int y, int x2, int y2)
{
int dist = 0;
int deltaX = Math.abs(x2-x);
int deltaY = Math.abs(y2-y);
if(deltaY >= deltaX)
dist = deltaY;
else dist = deltaY + (deltaX-deltaY)/2;
return dist;
}

public static void main(String... args) throws Exception
{

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
StringTokenizer token;
token = new StringTokenizer(line);
int first = Integer.parseInt(token.nextToken());
int second = Integer.parseInt(token.nextToken());
while(first != 0)
{

int col = 0;
int row = 0;
int col2 = 0;
int row2 = 0;

int Wabe = 1;
int Wabe2 = 1;
int zyklus = 0;
while(Wabe < first)
{
zyklus++;
Wabe += zyklus * 6;
}
// Sektor 1
if(Wabe-zyklus*3 < first && Wabe-zyklus > first)
{
col = - zyklus + first - (Wabe-zyklus*3);
}
// Sektor 2
if(Wabe-zyklus <= first && Wabe >= first)
{
col = zyklus;
}
// Sektor 3
if(Wabe-4*zyklus > first && Wabe - 6*zyklus < first)
{
col = -zyklus + (Wabe-zyklus*4) - first;
}
// Sektor4
if(Wabe - zyklus*3 >= first && Wabe - zyklus*4 <= first)
{
col = -zyklus;
}

// Sektor 1
if(Wabe - zyklus*3 < first && Wabe - zyklus > first)
{
row = 2*zyklus - Math.abs(Wabe-2*zyklus-first);
}
// Sektor 2
if(Wabe >= first && Wabe - zyklus <= first)
{
if(zyklus % 2 == 0)
row = -zyklus + (Wabe - first)*2;
else
row = -zyklus + (Wabe - first)*2;
}
// Sektor 3
if(Wabe - 4*zyklus > first && Wabe - 6*zyklus < first)
{
row = -2*zyklus + Math.abs(Wabe-5*zyklus-first);
}
// Sektor 4
if(Wabe - 3*zyklus >= first && Wabe - zyklus*4 <= first)
{
if(zyklus % 2 == 0)
row = -zyklus + (first - (Wabe - 4*zyklus))*2;
else
row = -zyklus + (first - (Wabe - 4 * zyklus))*2;
}



zyklus = 0;
while(Wabe2 < second)
{
zyklus++;
Wabe2 += zyklus * 6;
}
// Sektor 1
if(Wabe2-zyklus*2-zyklus < second && Wabe2-zyklus*2+zyklus > second)
{
col2 = - zyklus + second - (Wabe2-zyklus*2-zyklus);
}
// Sektor 2
if(Wabe2-zyklus <= second && Wabe2 >= second)
{
col2 = zyklus;
}
// Sektor 3
if(Wabe2-4*zyklus > second && Wabe2 - 6*zyklus < second)
{
col2 = -zyklus + (Wabe2-zyklus*4) - second;
}
// Sektor4
if(Wabe2 - zyklus*3 >= second && Wabe2 - zyklus*4 <= second)
{
col2 = -zyklus;
}



// Sektor 1
if(Wabe2 - zyklus*3 < second && Wabe2 - zyklus > second)
{
row2 = 2*zyklus - Math.abs(Wabe2-2*zyklus-second);
}
// Sektor 2
if(Wabe2 >= second && Wabe2 - zyklus <= second)
{
if(zyklus % 2 == 0)
row2 = -zyklus + (Wabe2 - second)*2;
else
row2 = -zyklus + (Wabe2 - second)*2;
}
// Sektor 3
if(Wabe2 - 4*zyklus > second && Wabe2 - 6*zyklus < second)
{
row2 = -2*zyklus + Math.abs(Wabe2-5*zyklus-second);
}
// Sektor 4
if(Wabe2 - 3*zyklus >= second && Wabe2 - zyklus*4 <= second)
{
if(zyklus % 2 == 0)
row2 = -zyklus + (second - (Wabe2 - 4*zyklus))*2;
else
row2 = -zyklus + (second - (Wabe2 - 4 * zyklus))*2;
}
/**
* Endgültige Berechnung der Distanz mit Hilfe
* der Größen
* rowDif
* colDif
* row, row2
* col, col2
*
* Wir bewegen uns dabei vom kleineren zum größeren Objekt
* col ist KLEINERES
* col2 ist GRÖßERES
*/

System.out.println("The distance between cells "+ first +" and "
+second+" is "+distance(row,col,row2,col2)+".");
line = reader.readLine();
token = new StringTokenizer(line);
first = Integer.parseInt(token.nextToken());
second = Integer.parseInt(token.nextToken());
}

}
}