#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ll long longusingnamespacestd;
constint maxn=1005;
int a[maxn][maxn],n,i,t,j,k,l,m,p,x,y,xx,yy,r,mid,l1;
int f[maxn][maxn],g[11][11][maxn][maxn],ans;
int pan(int x,int y){
int i,j,t=0,k=0;
while (x+(1<<(t+1))-1<=xx) t++;
while (y+(1<<(k+1))-1<=yy) k++;
ans=g[t][k][xx][yy];
if (g[t][k][x+(1<<t)-1][y+(1<<k)-1]>ans) ans=g[t][k][x+(1<<t)-1][y+(1<<k)-1];
if (ans<g[t][k][x+(1<<t)-1][yy]) ans=g[t][k][x+(1<<t)-1][yy];
if (ans<g[t][k][xx][y+(1<<k)-1]) ans=g[t][k][xx][y+(1<<k)-1];
return ans;
}
int get(){
char ch=getchar();int x=0;
while (ch<'0' || ch>'9') ch=getchar();
while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
int main(){
freopen("square.in","r",stdin);freopen("square.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++){
scanf("%d",&a[i][j]);
if (a[i][j]) f[i][j]=min(min(f[i-1][j-1],f[i-1][j]),f[i][j-1])+1;
g[0][0][i][j]=f[i][j];
}
l1=log(n)/log(2);
p=log(m)/log(2);
for (i=0;i<=l1;i++)
for (j=0;j<=p;j++){
if (!i && !j) continue;
for (x=(1<<i);x<=n;x++)
for (y=(1<<j);y<=m;y++){
if (i){
if (g[i-1][j][x][y]>g[i-1][j][x-(1<<(i-1))][y]) g[i][j][x][y]=g[i-1][j][x][y];
else g[i][j][x][y]=g[i-1][j][x-(1<<(i-1))][y];
}
else{
if (g[i][j-1][x][y]>g[i][j-1][x][y-(1<<(j-1))]) g[i][j][x][y]=g[i][j-1][x][y];
else g[i][j][x][y]=g[i][j-1][x][y-(1<<(j-1))];
}
}
}
scanf("%d",&m);
while (m){
scanf("%d%d%d%d",&x,&y,&xx,&yy);
//x=get();y=get();xx=get();yy=get();
l=0;r=min(yy-y+1,xx-x+1);
while (l<r){
mid=(l+r+1)/2;
if (pan(x+mid-1,y+mid-1)>=mid) l=mid;
else r=mid-1;
}
printf("%d\n",l);
m--;
}
}