#include <stdio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
bool isInArea(int posX, int posY, int destX, int destY)
{
return ((abs(posX - destX) <= 2) &&
(abs(posY - destY) <= 2) );
}
bool size3443(int sizeX, int sizeY)
{
return ( ( sizeX >= 3 && sizeY>=4 ) ||
( sizeX >= 4 && sizeY>=3 ) );
}
bool size3223(int sizeX, int sizeY)
{
return ( ( sizeX >= 2 && sizeY>=3 ) ||
( sizeX >= 3 && sizeY>=2 ) );
}
int getStepsInArea(int posX, int posY, int destX, int destY, int sizeX, int sizeY)
{
int diffX = abs (destX - posX);
int diffY = abs (destY - posY);
if (size3443(sizeX, sizeY))
{
if ((diffX == 1 && diffY == 0) ||
(diffX == 0 && diffY == 1) ) return 3;
if ((diffX == 2 && diffY == 0) ||
(diffX == 0 && diffY == 2) ||
(diffX == 1 && diffY == 1) ) return 2;
if (diffX == 2 && diffY == 2) return 4;
}
if (size3223(sizeX, sizeY))
{
if ((diffX == 1 && diffY == 2) ||
(diffX == 2 && diffY == 1) ) return 1;
}
return -1111;
}
int main()
{
int sizeX, sizeY, destX, destY, posX, posY, diffX, diffY;
while ( scanf("%d%d%d%d%d%d", &sizeX, &sizeY, &posX, &posY
, &destX, &destY ) == 6 )
{
int stepCount = 0;
while (!isInArea(posX, posY, destX, destY))
{
int goX;
int goY;
diffX = destX - posX;
diffY = destY - posY;
if (abs(diffX) > abs(diffY))
{
if (diffX > 0) goX = 2;
else goX = -2;
if (diffY > 0) goY = 1;
else goY = -1;
}
else
{
if (diffY > 0) goY = 2;
else goY = -2;
if (diffX > 0) goX = 1;
else goX = -1;
}
posX+=goX;
posY+=goY;
stepCount++;
}
int stepsInArea = getStepsInArea(posX, posY, destX, destY, sizeX, sizeY);
if (stepsInArea<0) printf ("impossible\n");
else
{
stepCount += stepsInArea;
printf ("%d\n", stepCount);
}
}
return 0;
}