#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Tối ưu I/O
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long H, W, N;
if (!(cin >> H >> W >> N)) return 0;
vector<pair<long long, long long>> doors(N);
for (int i = 0; i < N; ++i) {
cin >> doors[i].first >> doors[i].second;
}
// Sắp xếp các cửa theo hàng (row), sau đó theo cột (col)
sort(doors.begin(), doors.end());
long long opt1_cost = 0;
long long sum_creturn = 0;
vector<long long> deltas;
vector<long long> X;
for (int i = 0; i < N; ++i) {
X.push_back(doors[i].second);
// Kích hoạt xử lý khi đã gom đủ các cột của một hàng
if (i == N - 1 || doors[i].first != doors[i+1].first) {
sort(X.begin(), X.end());
X.erase(unique(X.begin(), X.end()), X.end());
// Chiến lược 1: Chỉ tiếp cận từ cột 1 (không bao giờ sang cột W)
opt1_cost += 2LL * (X.back() - 1);
// Chiến lược 2: Chia cắt khoảng cách lớn nhất, tiếp cận từ cả cột 1 và cột W
long long max_gap = max(X.front() - 1, W - X.back());
for (size_t j = 0; j < X.size() - 1; ++j) {
max_gap = max(max_gap, X[j+1] - X[j]);
}
long long c_ret = 2LL * (W - 1 - max_gap);
sum_creturn += c_ret;
// Lượng chi phí thay đổi nếu quyết định đi xuyên qua hàng này (từ 1 -> W hoặc W -> 1)
deltas.push_back((W - 1) - c_ret);
X.clear();
}
}
// Luôn có sẵn vô hạn hàng rỗng để đi xuyên qua với chi phí W - 1 (cần tối đa 2 hàng để cân bằng tính chẵn lẻ)
deltas.push_back(W - 1);
deltas.push_back(W - 1);
sort(deltas.begin(), deltas.end());
long long S_neg = 0;
int K = 0;
for (long long d : deltas) {
if (d < 0) {
S_neg += d;
K++;
}
}
long long opt2_cost = 0;
// Bắt buộc số lần đi xuyên qua các hàng (từ cột này sang cột kia) phải là số chẵn và >= 2 để có thể sử dụng cột W
if (K % 2 == 1) {
if (K > 1) {
opt2_cost = sum_creturn + S_neg + min(-deltas[K-1], deltas[K]);
} else {
opt2_cost = sum_creturn + S_neg + deltas[1];
}
} else {
if (K >= 2) {
opt2_cost = sum_creturn + S_neg;
} else {
opt2_cost = sum_creturn + deltas[0] + deltas[1];
}
}
// Kết quả cuối cùng là giá trị tối ưu giữa việc không bao giờ dùng thang máy cột W và có dùng thang máy cột W
cout << min(opt1_cost, opt2_cost) << "\n";
return 0;
}