import heapq def dijkstra(s): hq=[] heapq.heappush(hq,[0,s]) dist=[-1 for _ in range(N)] karidist=[10**9+1 for _ in range(N)] while len(hq)!=0: d,p=heapq.heappop(hq) if dist[p]==-1: dist[p]=d for e,c in edge[p]: if karidist[e]>d+c: karidist[e]=d+c heapq.heappush(hq,[d+c,e]) return dist def csv(i,j): return i*W+j import sys input=sys.stdin.readline H,W,N=map(int,input().split()) dat=[] poses=[(0,0),(H-1,W-1)] poses=set(poses) for i in range(N): a,b,c,d=map(int,input().split()) a-=1 b-=1 c-=1 d-=1 dat.append([a,b,c,d]) poses.add((a,b)) poses.add((c,d)) edge=[[] for _ in range(len(poses))] poses=list(poses) from collections import defaultdict dic=defaultdict(lambda:-1) for i in range(len(poses)): dic[poses[i]]=i for a,b,c,d in dat: edge[dic[(a,b)]].append([dic[(c,d)],1]) for i in range(len(poses)): for j in range(i+1,len(poses)): a,b=poses[i] c,d=poses[j] edge[i].append([j,abs(a-c)+abs(b-d)]) edge[j].append([i,abs(a-c)+abs(b-d)]) N=len(poses) dist=dijkstra(poses.index((0,0))) print(dist[poses.index((H-1,W-1))])