from sys import stdin input = stdin.readline from collections import defaultdict from bisect import bisect_left, bisect_right class Top2: def __init__(self): self.best1 = (INF, -1) self.best2 = (INF, -1) def add(self, val, genre): b1v, b1g = self.best1 b2v, b2g = self.best2 if genre == b1g: if val < b1v: self.best1 = (val, genre) else: if val < b1v: self.best2 = self.best1 self.best1 = (val, genre) elif val < b2v: self.best2 = (val, genre) def get_exclude(self, genre): if self.best1[1] != genre: return self.best1[0] else: return self.best2[0] INF = 1<<60 H, W, N = map(int, input().split()) AB = [list(map(int, input().split())) for _ in range(N)] D = defaultdict(lambda : Top2()) E = defaultdict(list) for i, (A, B) in enumerate(AB): D[B].add(A-1, i) E[B].append(A) for key in E.keys(): E[key].sort() F = sorted(D.keys()) L = [Top2() for _ in range(len(F))] for i, key in enumerate(F): L[i].add(*D[key].best1) L[i].add(*D[key].best2) if 1 <= i: L[i].add(L[i-1].best1[0]+(F[i]-F[i-1]), L[i-1].best1[1]) L[i].add(L[i-1].best2[0]+(F[i]-F[i-1]), L[i-1].best2[1]) R = [Top2() for _ in range(len(F))] for i in reversed(range(len(F))): key = F[i] R[i].add(*D[key].best1) R[i].add(*D[key].best2) if i+1 < len(F): R[i].add(R[i+1].best1[0]+(F[i+1]-F[i]), R[i+1].best1[1]) R[i].add(R[i+1].best2[0]+(F[i+1]-F[i]), R[i+1].best2[1]) M = [Top2() for _ in range(len(F))] for i in range(len(F)): M[i].add(*L[i].best1) M[i].add(*L[i].best2) M[i].add(*R[i].best1) M[i].add(*R[i].best2) for i, (A, B) in enumerate(AB): ans = INF b = bisect_left(F, B) if b < len(F): ans = min(ans, M[b].get_exclude(i)+(A-1)+(F[b]-B)) if 1 <= b: ans = min(ans, M[b-1].get_exclude(i)+(A-1)+(B-F[b-1])) b = bisect_left(E[B], A) if 1 <= b: ans = min(ans, A-E[B][b-1]) if b+1 < len(E[B]): ans = min(ans, E[B][b+1]-A) b = bisect_left(E[B-1], A) if 1 <= b: ans = min(ans, A) if b < len(E[B-1]): ans = min(ans, E[B-1][b]) b = bisect_left(E[B+1], A) if 1 <= b: ans = min(ans, A) if b < len(E[B+1]): ans = min(ans, E[B+1][b]) print(ans)