#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;
class field {
public:
int x;
int y;
field(){};
};
int main () {
int matrix [100][100];
int r, c, gr, gc, lr, lc;
int free,cur;
int move;
field * desk = new field [10000];
while (scanf("%d%d%d%d%d%d",&r,&c,&gr,&gc,&lr,&lc) == 6) {
lr--;
lc--;
gr--;
gc--;
cur = 0;
free = 1;
move = 1;
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
matrix[i][j] = -1;
matrix[gr][gc] = 0;
desk[cur].x = gr;
desk[cur].y = gc;
while (matrix[lr][lc] == -1 && move) {
move--;
if (desk[cur].x+2 < r &&
desk[cur].y+1 < c &&
matrix[desk[cur].x+2][desk[cur].y+1] == -1) {
desk[free].x= desk[cur].x+2;
desk[free].y= desk[cur].y+1;
matrix[desk[cur].x+2][desk[cur].y+1] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x+2 < r &&
desk[cur].y-1 > -1 &&
matrix[desk[cur].x+2][desk[cur].y-1] == -1) {
desk[free].x= desk[cur].x+2;
desk[free].y= desk[cur].y-1;
matrix[desk[cur].x+2][desk[cur].y-1] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x-2 > -1 &&
desk[cur].y+1 < c &&
matrix[desk[cur].x-2][desk[cur].y+1] == -1) {
desk[free].x= desk[cur].x-2;
desk[free].y= desk[cur].y+1;
matrix[desk[cur].x-2][desk[cur].y+1] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x-2 > -1 &&
desk[cur].y-1 > -1 &&
matrix[desk[cur].x-2][desk[cur].y-1] == -1) {
desk[free].x= desk[cur].x-2;
desk[free].y= desk[cur].y-1;
matrix[desk[cur].x-2][desk[cur].y-1] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x-1 > -1 &&
desk[cur].y+2 < c &&
matrix[desk[cur].x-1][desk[cur].y+2] == -1) {
desk[free].x= desk[cur].x-1;
desk[free].y= desk[cur].y+2;
matrix[desk[cur].x-1][desk[cur].y+2] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x-1 > -1 &&
desk[cur].y-2 > -1 &&
matrix[desk[cur].x-1][desk[cur].y-2] == -1) {
desk[free].x= desk[cur].x-1;
desk[free].y= desk[cur].y-2;
matrix[desk[cur].x-1][desk[cur].y-2] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x+1 < r &&
desk[cur].y+2 < c &&
matrix[desk[cur].x+1][desk[cur].y+2] == -1) {
desk[free].x= desk[cur].x+1;
desk[free].y= desk[cur].y+2;
matrix[desk[cur].x+1][desk[cur].y+2] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
if (desk[cur].x+1 < r &&
desk[cur].y-2 > -1 &&
matrix[desk[cur].x+1][desk[cur].y-2] == -1) {
desk[free].x= desk[cur].x+1;
desk[free].y= desk[cur].y-2;
matrix[desk[cur].x+1][desk[cur].y-2] = matrix[desk[cur].x][desk[cur].y]+1;
free++;
move++;
}
cur++;
}
/*
for (int i = 0; i < r; i++){
for (int j = 0; j < c; j++) {
if (matrix[i][j] == -1)
cout << " ";
else
cout << matrix[i][j] << " ";
}
cout << endl;
}
*/
if (matrix[lr][lc] == -1)
cout << "impossible" << endl;
else
cout << matrix[lr][lc] << endl;
}
return 0;
}