#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
int r,c,gr,gc,lr,lc;
int table[100][100];
int fronta[10010];
int fR,fW;
bool possible(int a1, int a2){
if(a1<r&&a1>=0&&a2>=0&&a2<c)return true;
return false;
}
int main()
{
while(scanf("%d%d%d%d%d%d",&r,&c,&gr,&gc,&lr,&lc)==6){
fR=fW=0;
lr--;lc--;gr--;gc--;
for(int i=0;i<100;i++){
for(int j=0;j<100;j++){
if(i<r && j<c)table[i][j]=200;
else table[i][j]=-1;
}
}
int hops = -1;
//printf("gr%d gc%d\n",gr,gc);
table[gr][gc] = 0;
fronta[fW++]=100*gr+gc;
int actual,actTable;
int actR,actC;
while(fR!=fW){
//printf("ctu frontu %d\n",fR);
actual = fronta[fR++];
//printf("ctu frontu %d\n",actual);
actC = actual%100;
actR = actual/100;
actTable = table[actR][actC];
//printf("Jsem v %d %d po %d skocich\n",actR,actC,actTable);
if(actC==lc && actR==lr){
hops = table[actR][actC];
break;
}
if(possible(actR+1,actC+2)){
if(actTable+1 < table[actR+1][actC+2]){
table[actR+1][actC+2]=actTable+1;
//printf("frontim na %d\n",fW);
fronta[fW++]=(actR+1)*100+actC+2;
}
}
if(possible(actR+2,actC+1)){
if(actTable+1 < table[actR+2][actC+1]){
table[actR+2][actC+1]=actTable+1;
//printf("frontim na %d\n",fW);
fronta[fW++]=(actR+2)*100+actC+1;
}
}
if(possible(actR-1,actC+2)){
if(actTable+1 < table[actR-1][actC+2]){
table[actR-1][actC+2]=actTable+1;
//printf("frontim na %d\n",fW);
fronta[fW++]=(actR-1)*100+actC+2;
}
}
if(possible(actR+1,actC-2)){
if(actTable+1 < table[actR+1][actC-2]){
table[actR+1][actC-2]=actTable+1;
//printf("frontim na %d\n",fW);
fronta[fW++]=(actR+1)*100+actC-2;
}
}
if(possible(actR-2,actC+1)){
if(actTable+1 < table[actR-2][actC+1]){
table[actR-2][actC+1]=actTable+1;
//printf("frontim na %d\n",fW);
fronta[fW++]=(actR-2)*100+actC+1;
}
}
if(possible(actR+2,actC-1)){
if(actTable+1 < table[actR+2][actC-1]){
table[actR+2][actC-1]=actTable+1;
//printf("frontim na %d\n",fW);
fronta[fW++]=(actR+2)*100+actC-1;
}
}
if(possible(actR-1,actC-2)){
if(actTable+1 < table[actR-1][actC-2]){
table[actR-1][actC-2]=actTable+1;
//printf("frontim1 na %d\n",fW);
fronta[fW++]=(actR-1)*100+actC-2;
//printf("frontim1 na %d %d\n",fW,fronta[fW]);
}
}
if(possible(actR-2,actC-1)){
if(actTable+1 < table[actR-2][actC-1]){
table[actR-2][actC-1]=actTable+1;
//printf("frontim2 na %d\n",fW);
fronta[fW++]=(actR-2)*100+actC-1;
}
}
}
if(hops==-1)printf("impossible\n");
else{printf("%d\n",hops);}
}
return 0;
}
/*
for(int i=0;i<10;i++)
{
}
scanf("%d",&);
printf("%d");
*/