//棋盘问题
public class Main {
static int REScount = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int[][] arr = new int[n][m];
for(int i=0;i<k;i++){
int x = sc.nextInt();
int y = sc.nextInt();
arr[x][y] = 1;
}
HashSet<String> set = new HashSet<>();
int startX = 0;
int stattY = 0;
int endX = n-1;
int endY = m-1;
process(0,arr,set,startX,stattY,endX,endY);
if(REScount == Integer.MAX_VALUE){
System.out.println(0);
}else{
System.out.println(REScount);
}
}
//
public static void process(int count,int[][] arr,HashSet<String> set,int startX,int startY,int endX,int endY){
if(startX == endX && startY == endY){//到达终点
REScount = Math.min(count, REScount);
return;
}else if( startX<0 || startX>=arr.length || startY<0 || startY>=arr[0].length){//越界
return ;
}else if(arr[startX][startY] ==1){//障碍物不能走
return;
}else {
String loc = startX+"+"+startY;
if(set.contains(loc)){//已经走过
return ;
}else{
set.add(loc);//添加次点
//上下左右走
process(count+1,arr,set,startX-1,startY,endX,endY);
process(count+1,arr,set,startX+1,startY,endX,endY);
process(count+1,arr,set,startX,startY-1,endX,endY);
process(count+1,arr,set,startX,startY+1,endX,endY);
set.remove(loc);//移除改点
}
}
}
}