#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;//不添加using namespace std queu报错
struct direct{
int dr,dc;
}direct[4]={{-1,0},{1,0},{0,-1},{0,1}};
int visited[101][101][300];
struct node{
int row,col,level;
};
int bfs(int n,int m){
//初始化,入队列
node start,front,v;
start.row=1;
start.col=1;
start.level=0;
queue<node> q;
q.push(start);
//while循环
while(!q.empty()){
front=q.front();
q.pop();
printf("(%d , %d)---%d\n",front.row,front.col,front.level);
//边界条件
if(front.row==n&&front.col==m)return front.level;
//搜索
for(int i=0;i<4;i++){
v.row=front.row+direct[i].dr;
v.col=front.col+direct[i].dc;
v.level=front.level+1;
//出界
if(v.row<1||v.row>n||v.col<1||v.col>m)continue;
//危险
if(visited[v.row][v.col][v.level])continue;
//向前搜索
visited[v.row][v.col][v.level]=1;
q.push(v);
}
}
return 0;
}
int main(){
int n,m,t,r,c,a,b;
memset(visited,0,sizeof(visited));
scanf("%d%d%d",&n,&m,&t);
for(int i=1;i<=t;i++){
scanf("%d%d%d%d",&r,&c,&a,&b);//注意输入这里 ,“&”经常出错
for(int j=a;j<=b;j++)visited[r][c][j]=1;
}
int ans=bfs(n,m);
printf("%d",ans);
return 0;
}