#include <cstdio>
#include <cstdlib>
#include <queue>
#include <set>
struct XPoint{
int x;
int y;
int delka;
XPoint(int i, int j, int k){
x = i;
y = j;
delka = k;
}
};
int main(){
int rows, cols, gregrow, gregcol, leafrow, leafcol;
bool skok;
int delka;
bool mapa[100][100];
while(scanf("%d%d%d%d%d%d",&rows,&cols,&gregrow, &gregcol, &leafrow,&leafcol)==6){
std::queue<XPoint> fronta;
skok = false;
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
mapa[i][j] = false;
fronta.push(XPoint(gregrow,gregcol,0));
mapa[gregrow][gregcol] = true;
while(!fronta.empty()){
XPoint t = fronta.front();
fronta.pop();
delka = t.delka +1;
int x = t.x - 1;
int y = t.y - 2;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x + 1;
y = t.y - 2;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x -2;
y = t.y +1;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x -2;
y = t.y -1;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x +2;
y = t.y +1;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x +2;
y = t.y -1;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x +1;
y = t.y +2;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
x = t.x -1;
y = t.y + 2;
if(x == leafrow && y == leafcol) {skok = true;break;}
if(!mapa[x][y] && x >= 0 && x < rows && y >= 0 && y < cols) {fronta.push(XPoint(x,y,t.delka +1));mapa[x][y] = true;}
}
if(skok) printf("%d\n",delka);
else printf("impossible\n");
}
return 0;
}