import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static final int[][] polePozic={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}};
public static void main
(String[] args
) { Scanner sc
=new Scanner
(System.
in); while(sc.hasNext()){
int pocetRadek=sc.nextInt();
int pocetSloupcu=sc.nextInt();
int poziceSkokanaX=sc.nextInt();
int poziceSkokanaY=sc.nextInt();
int poziceMnamkyX=sc.nextInt();
int poziceMnamkyY=sc.nextInt();
boolean poleJizSkakano[][]=new boolean[pocetRadek+1][pocetSloupcu+1];
Place pocatek=new Place(poziceSkokanaX, poziceSkokanaY,0);
poleJizSkakano[poziceSkokanaY][poziceSkokanaX]=true;
// System.out.println(poleJizSkakano[5][5]);
ArrayList<Place> fronta = new ArrayList<Place>();
fronta.add(pocatek);
boolean nalez=false;
while(!fronta.isEmpty() && !nalez){
Place aktZpracovane=fronta.get(0);
fronta.remove(0);
int aktX=aktZpracovane.x;
int aktY=aktZpracovane.y;
if((aktX ==poziceMnamkyX) && (aktY==poziceMnamkyY)){
System.
out.
println(aktZpracovane.
step); nalez=true;
}else{
aktZpracovane.step++;
for(int i=0;i<polePozic.length;i++){
int testX=aktZpracovane.x+polePozic[i][0];
int testY=aktZpracovane.y+polePozic[i][1];
if(((testX>=1) && (testX<=pocetSloupcu))&&((testY>=1)&&(testY<=pocetRadek))){
if(!poleJizSkakano[testY][testX]){
fronta.add(new Place(testX, testY,aktZpracovane.step));
}
}
}
}
}
// System.out.println("dostalo se k ifu");
if(fronta.isEmpty()){
System.
out.
println("impossible"); }
}
}
}
class Place{
public int x;
public int y;
public int step;
public Place(int x, int y, int step){
this.x=x;
this.y=y;
this.step=step;
}
}
//class Fronta{
// public Place zacatek;
// public Place konec;
//
// public Fronta(){
// zacatek=null;
// konec=null;
// zacatek=konec;
// }
//
// public pridejPrvek()
//
//
//}