#pragma GCC optimize "O3"
#pragma GCC target "sse4.1"

#include <iostream>

int n, m, q;

bool used[1000 + 10][1000 + 10];

int sq(int sx, int sy) {
#define D {fail = true; break; }

	for(int s = 1;;s ++) {
		bool fail = false;
		//if(sx + s >= m+2 or sy + s >= n+2) while(true) {};
		for(int x = sx;x <= sx + s;x ++) {
			if(used[x][sy + 0]) D;
			if(used[x][sy + s]) D;
		}
		if(fail) return s;
		for(int y = sy;y <= sy + s;y ++) {
			if(used[sx + 0][y]) D;
			if(used[sx + s][y]) D;
		}
		if(fail) return s;
	}
}

int sq_more(int sx, int sy, int arg) {
#define D {fail = true; break; }

	for(int s = arg;;s ++) {
		bool fail = false;
		//if(sx + s >= m+2 or sy + s >= n+2) while(true) {};
		for(int x = sx;x <= sx + s;x ++) {
			if(used[x][sy + 0]) D;
			if(used[x][sy + s]) D;
		}
		if(fail) return s;
		for(int y = sy;y <= sy + s;y ++) {
			if(used[sx + 0][y]) D;
			if(used[sx + s][y]) D;
		}
		if(fail) return s;
	}
}

bool sq_less(int sx, int sy, int arg) {
#define D {fail = true; break; }
	if(arg <= 0) return true;

	for(int s = arg;s >= 0;s --) {
		bool fail = false;
		//if(sx + s >= m+2 or sy + s >= n+2) while(true) {};
		for(int x = sx;x <= sx + s;x ++) {
			if(used[x][sy + 0]) D;
			if(used[x][sy + s]) D;
		}
		if(fail) return false;
		for(int y = sy;y <= sy + s;y ++) {
			if(used[sx + 0][y]) D;
			if(used[sx + s][y]) D;
		}
		if(fail) return false;
	}

	return true;
}

int main() {
	std::cin.tie(nullptr);
	//std::ios_base::sync_wth_stdio(false);

	std::cin >> n >> m;
	std::cin >> q;

	for(int i = 0;i < q;i ++) {
		int x1, y1, x2, y2;
		std::cin >> y1 >> x1 >> y2 >> x2;
		//x1 --;
		//y1 --;
		//x2 --;
		//y2 --;
		for(int x = x1;x <= x2;x ++) {
			for(int y = y1;y <= y2;y ++) {
				used[x][y] = true;
			}
		}
	}
	for(int sx = 0;sx <= m+1;sx ++) {
		for(int sy = 0;sy <= n+1;sy ++) {
			if(sx == 0 or sx == m+1 or sy == 0 or sy == n+1) used[sx][sy] = true;
			//std::cout << used[sx][sy];
		}
		//std::cout << '\n';
	}

	int ans = 0;
	bool any = true;
	for(int sx = 1;sx <= m;sx ++) {
		for(int sy = 1;sy <= n;sy ++) {
			if(used[sx][sy]) continue;
			any = true;
			const int s = sq_more(sx, sy, ans);
			if(s > ans) {
				if(sq_less(sx, sy, ans)) {
					ans = s;
				}
			}
		}
	}
	if(any and ans == 0) ans = 1;

	std::cout << ans << std::endl;
	return 0;
}
