#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct Node//当前位置和时间
{
int r,c,t;
Node(int rr,int cc,int tt):r(rr),c(cc),t(tt){
}
};
int visited[105][105][305]={0};//标记一个点人(r,c)在t时刻是否可以访问
int n,m,t;
int dis[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//上下左右
int main(int argc, char** argv)
{
cin>>n>>m>>t;
while(t--)
{
int r,c,a,b;
cin>>r>>c>>a>>b;
for(int i=a;i<=b;i++)
{
visited[r][c][i]=1;//1:不可以被访问
}
}
queue<Node> q;//BFS
q.push(Node(1,1,0));//把第一个点加入
visited[1][1][0]=1;//标记
while(!q.empty())
{
Node v=q.front();
q.pop();
if(v.r==n&&v.c==m)//边界条件
{
cout<<v.t;
return 0;
}
//往四个方向走
for(int i=0;i<4;i++)
{
int tr=v.r+dis[i][0];
int tc=v.c+dis[i][1];
int time=v.t+1;
//不可越界访问
if(tr>0&&tr<=n&&tc>0&&tc<=m&&!visited[tr][tc][time])
{
q.push(Node{tr,tc,time});
visited[tr][tc][time]=1;
}
}
}
return 0;
}