#include using namespace std; using i64 = long long; using P = pair; #define yn(pope) (pope ? "Yes" : "No") #define rep(i, n, m) for (int i = (n); i < (m); i++) #define rrep(i, n, m) for (int i = (n); i > m; i--) #define IINF (1 << 30) #define INF (1ll << 60) #define all(v) v.begin(), v.end() int main() { int H, W, N; cin >> H >> W >> N; vector

from(N), to(N); rep(i, 0, N) { int a, b, c, d; cin >> a >> b >> c >> d; from[i] = {a, b}; to[i] = {c, d}; } map memo; auto dfs = [&](auto self, int x, int y) -> int { if (memo.count({x, y}) == 1) { return memo[{x, y}]; } if (x == H && y == W) { return memo[{x, y}] = 0; } int ans = (H - x) + (W - y); rep(i, 0, N) { auto [a, b] = from[i]; auto [c, d] = to[i]; if ((P){a, b} >= (P){c, d}) { continue; } if ((P){x, y} >= (P){a, b}) { continue; } ans = min(ans, (a - x) + (b - y) + 1 + self(self, c, d)); } return memo[{x, y}] = ans; }; cout << dfs(dfs, 1, 1) << endl; return 0; }