//棋盘问题
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);//移除改点
			}
		}
	}
}