#include <bits/stdc++.h>
using namespace std;
const int MAX_M = 1005;
const int MAX_N = 1005;
int m, n, k;
int a[MAX_M][MAX_N];
int is01[MAX_M][MAX_N], is12[MAX_M][MAX_N];
pair<int, int> queries[1000006];
unordered_map<long long, int> cache;
// Hàm tính largest rectangle trong histogram
int largestRectangleArea(vector<int> &height) {
stack<int> st;
int maxArea = 0, n = height.size();
height.push_back(0); // sentinel
for (int i = 0; i <= n; ++i) {
while (!st.empty() && height[i] < height[st.top()]) {
int h = height[st.top()]; st.pop();
int w = st.empty() ? i : i - st.top() - 1;
maxArea = max(maxArea, h * w);
}
st.push(i);
}
height.pop_back();
return maxArea;
}
// Tính diện tích lớn nhất trong khoảng dòng [p, q]
int solve(int p, int q) {
vector<int> height(n, 0);
int res = 0;
// Trường hợp tập {0,1}
for (int i = p; i <= q; ++i) {
for (int j = 0; j < n; ++j)
height[j] = is01[i][j] ? height[j] + 1 : 0;
res = max(res, largestRectangleArea(height));
}
fill(height.begin(), height.end(), 0);
// Trường hợp tập {1,2}
for (int i = p; i <= q; ++i) {
for (int j = 0; j < n; ++j)
height[j] = is12[i][j] ? height[j] + 1 : 0;
res = max(res, largestRectangleArea(height));
}
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
freopen("SQL.inp","r",stdin);
freopen("SQL.out","w",stdout);
cin >> m >> n;
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j) {
cin >> a[i][j];
is01[i][j] = (a[i][j] == 0 || a[i][j] == 1);
is12[i][j] = (a[i][j] == 1 || a[i][j] == 2);
}
cin >> k;
for (int i = 0; i < k; ++i) {
int p, q;
cin >> p >> q;
--p; --q; // 0-index
queries[i] = {p, q};
}
for (int i = 0; i < k; ++i) {
int p = queries[i].first, q = queries[i].second;
long long key = 1LL * p * 10000 + q; // tạo key duy nhất
if (cache.count(key)) {
cout << cache[key] << '\n';
} else {
int res = solve(p, q);
cache[key] = res;
cout << res << '\n';
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYX00gPSAxMDA1Owpjb25zdCBpbnQgTUFYX04gPSAxMDA1OwoKaW50IG0sIG4sIGs7CmludCBhW01BWF9NXVtNQVhfTl07CmludCBpczAxW01BWF9NXVtNQVhfTl0sIGlzMTJbTUFYX01dW01BWF9OXTsKcGFpcjxpbnQsIGludD4gcXVlcmllc1sxMDAwMDA2XTsKdW5vcmRlcmVkX21hcDxsb25nIGxvbmcsIGludD4gY2FjaGU7CgovLyBIw6BtIHTDrW5oIGxhcmdlc3QgcmVjdGFuZ2xlIHRyb25nIGhpc3RvZ3JhbQppbnQgbGFyZ2VzdFJlY3RhbmdsZUFyZWEodmVjdG9yPGludD4gJmhlaWdodCkgewogICAgc3RhY2s8aW50PiBzdDsKICAgIGludCBtYXhBcmVhID0gMCwgbiA9IGhlaWdodC5zaXplKCk7CiAgICBoZWlnaHQucHVzaF9iYWNrKDApOyAvLyBzZW50aW5lbAoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG47ICsraSkgewogICAgICAgIHdoaWxlICghc3QuZW1wdHkoKSAmJiBoZWlnaHRbaV0gPCBoZWlnaHRbc3QudG9wKCldKSB7CiAgICAgICAgICAgIGludCBoID0gaGVpZ2h0W3N0LnRvcCgpXTsgc3QucG9wKCk7CiAgICAgICAgICAgIGludCB3ID0gc3QuZW1wdHkoKSA/IGkgOiBpIC0gc3QudG9wKCkgLSAxOwogICAgICAgICAgICBtYXhBcmVhID0gbWF4KG1heEFyZWEsIGggKiB3KTsKICAgICAgICB9CiAgICAgICAgc3QucHVzaChpKTsKICAgIH0KCiAgICBoZWlnaHQucG9wX2JhY2soKTsKICAgIHJldHVybiBtYXhBcmVhOwp9CgovLyBUw61uaCBkaeG7h24gdMOtY2ggbOG7m24gbmjhuqV0IHRyb25nIGtob+G6o25nIGTDsm5nIFtwLCBxXQppbnQgc29sdmUoaW50IHAsIGludCBxKSB7CiAgICB2ZWN0b3I8aW50PiBoZWlnaHQobiwgMCk7CiAgICBpbnQgcmVzID0gMDsKCiAgICAvLyBUcsaw4budbmcgaOG7o3AgdOG6rXAgezAsMX0KICAgIGZvciAoaW50IGkgPSBwOyBpIDw9IHE7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgKytqKQogICAgICAgICAgICBoZWlnaHRbal0gPSBpczAxW2ldW2pdID8gaGVpZ2h0W2pdICsgMSA6IDA7CiAgICAgICAgcmVzID0gbWF4KHJlcywgbGFyZ2VzdFJlY3RhbmdsZUFyZWEoaGVpZ2h0KSk7CiAgICB9CgogICAgZmlsbChoZWlnaHQuYmVnaW4oKSwgaGVpZ2h0LmVuZCgpLCAwKTsKCiAgICAvLyBUcsaw4budbmcgaOG7o3AgdOG6rXAgezEsMn0KICAgIGZvciAoaW50IGkgPSBwOyBpIDw9IHE7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgKytqKQogICAgICAgICAgICBoZWlnaHRbal0gPSBpczEyW2ldW2pdID8gaGVpZ2h0W2pdICsgMSA6IDA7CiAgICAgICAgcmVzID0gbWF4KHJlcywgbGFyZ2VzdFJlY3RhbmdsZUFyZWEoaGVpZ2h0KSk7CiAgICB9CgogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgZnJlb3BlbigiU1FMLmlucCIsInIiLHN0ZGluKTsKICAgIGZyZW9wZW4oIlNRTC5vdXQiLCJ3IixzdGRvdXQpOwogICAgY2luID4+IG0gPj4gbjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgKytqKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgICAgICBpczAxW2ldW2pdID0gKGFbaV1bal0gPT0gMCB8fCBhW2ldW2pdID09IDEpOwogICAgICAgICAgICBpczEyW2ldW2pdID0gKGFbaV1bal0gPT0gMSB8fCBhW2ldW2pdID09IDIpOwogICAgICAgIH0KCiAgICBjaW4gPj4gazsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgKytpKSB7CiAgICAgICAgaW50IHAsIHE7CiAgICAgICAgY2luID4+IHAgPj4gcTsKICAgICAgICAtLXA7IC0tcTsgLy8gMC1pbmRleAogICAgICAgIHF1ZXJpZXNbaV0gPSB7cCwgcX07CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIHsKICAgICAgICBpbnQgcCA9IHF1ZXJpZXNbaV0uZmlyc3QsIHEgPSBxdWVyaWVzW2ldLnNlY29uZDsKICAgICAgICBsb25nIGxvbmcga2V5ID0gMUxMICogcCAqIDEwMDAwICsgcTsgLy8gdOG6oW8ga2V5IGR1eSBuaOG6pXQKICAgICAgICBpZiAoY2FjaGUuY291bnQoa2V5KSkgewogICAgICAgICAgICBjb3V0IDw8IGNhY2hlW2tleV0gPDwgJ1xuJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnQgcmVzID0gc29sdmUocCwgcSk7CiAgICAgICAgICAgIGNhY2hlW2tleV0gPSByZXM7CiAgICAgICAgICAgIGNvdXQgPDwgcmVzIDw8ICdcbic7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==