#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=2010;
char a[N][N];
int s[N][N];
int u[N],d[N],l[N],r[N];
int n,m;
void init()
{
// 上
memset(s,0,sizeof s);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='1')
{
s[i][j]=s[i-1][j]+1;
}
else s[i][j]=0;
}
vector<int> stk;
stk.push_back(0);
s[i][0]=-1;
int tmp = 0;
for(int j=1;j<=m+1;j++)
{
while(stk.size()&&s[i][stk.back()]>=s[i][j])
{
int cur = stk.back();
stk.pop_back();
tmp = max(tmp,s[i][cur]*(j-stk.back()-1));
}
stk.push_back(j);
}
u[i] = max(u[i-1], tmp);
}
// 左
memset(s,0,sizeof s);
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(a[i][j]=='1')
{
s[i][j]=s[i][j-1]+1;
}
else s[i][j]=0;
}
vector<int> stk;
stk.push_back(0);
s[0][j]=-1;
int tmp = 0;
for(int i=1;i<=n+1;i++)
{
while(stk.size()&&s[stk.back()][j]>=s[i][j])
{
int cur = stk.back();
stk.pop_back();
tmp = max(tmp,s[cur][j]*(i-stk.back()-1));
}
stk.push_back(i);
}
l[j] = max(l[j-1], tmp);
}
// 下
memset(s,0,sizeof s);
for(int i=n;i>=1;i--)
{
for(int j=m;j>=1;j--)
{
if(a[i][j]=='1')
{
s[i][j]=s[i+1][j]+1;
}
else s[i][j]=0;
}
vector<int> stk;
stk.push_back(m+1);
s[i][m+1]=-1;
int tmp = 0;
for(int j=m;j>=0;j--)
{
while(stk.size()&&s[i][stk.back()]>=s[i][j])
{
int cur = stk.back();
stk.pop_back();
tmp = max(tmp,s[i][cur]*(stk.back()-j-1));
}
stk.push_back(j);
}
d[i] = max(d[i+1], tmp);
}
// 右
memset(s,0,sizeof s);
for(int j=m;j>=1;j--)
{
for(int i=n;i>=1;i--)
{
if(a[i][j]=='1')
{
s[i][j]=s[i][j+1]+1;
}
else s[i][j]=0;
}
vector<int> stk;
stk.push_back(n+1);
s[n+1][j]=-1;
int tmp = 0;
for(int i=n;i>=0;i--)
{
while(stk.size()&&s[stk.back()][j]>=s[i][j])
{
int cur = stk.back();
stk.pop_back();
tmp = max(tmp,s[cur][j]*(stk.back()-i-1));
}
stk.push_back(i);
}
r[j] = max(r[j+1], tmp);
}
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
init();
int q;
cin>>q;
while(q--)
{
int i,j;
scanf("%d %d",&i,&j);
i++,j++;
printf("%d\n",max(max(u[i-1],d[i+1]),max(l[j-1],r[j+1])));
}
return 0;
}