#include <bits/stdc++.h> using namespace std; const int maxn = 105; int n,m,r,c,a,b,t; int mp[maxn*3][maxn][maxn]; int vis[maxn*3][maxn][maxn]; struct node { int x,y,time; node(){} node(int a,int b,int c){x=a;y=b;time=c;} }; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; queue<node>q; void bfs() { q.push(node(1,1,0)); vis[0][1][1] = 1; while(!q.empty()) { node now = q.front(); q.pop(); int t=now.time,x=now.x,y=now.y; for(int i=0;i<4;i++) { int yy = y+dy[i],xx=x+dx[i]; if(xx<1||xx>n||yy<1||yy>m||vis[t+1][xx][yy]||mp[t+1][xx][yy]) continue; if(xx==n&&yy==m) { cout<<t+1<<endl; return ; } q.push(node(xx,yy,t+1)); vis[t+1][xx][yy]=1; } } } int main() { cin>>n>>m>>t; while(t--) { cin>>r>>c>>a>>b; for(int i=a;i<=b;i++) mp[i][r][c] = 1; } bfs(); return 0; }