/*
题意:
(x1,y1)到(x2,y2)这个子矩阵中的四个角是否为子矩阵的最大值
二维rmq模版
*/
# include <stdio.h>
# include <algorithm>
# include <string.h>
# include <math.h>
using namespace std;
const int N=305;
int n,m;
int dpmax[N][N][9][9];//2^9-1
int val[N][N];
void RMQ()
{
int i,j,r,c,k1,k2;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
dpmax[i][j][0][0]=val[i][j];
k1=(int)(log(double(n))/log(2.0));
k2=(int)(log(double(m))/log(2.0));
for(i=0;i<=k1;i++)
{
for(j=0;j<=k2;j++)
{
if(i==0&&j==0)
continue;
for(r=1;r+(1<<i)-1<=n;r++)
{
for(c=1;c+(1<<j)-1<=m;c++)
{
if(i==0)
dpmax[r][c][i][j]=max(dpmax[r][c][i][j-1],dpmax[r][c+(1<<(j-1))][i][j-1]);
else
dpmax[r][c][i][j]=max(dpmax[r][c][i-1][j],dpmax[r+(1<<(i-1))][c][i-1][j]);
}
}
}
}
}
int query(int r1,int c1,int r2,int c2)
{
int kr=(int)(log(double(r2-r1+1))/log(2.0));
int kc=(int)(log(double(c2-c1+1))/log(2.0));
int t1=dpmax[r1][c1][kr][kc];
int t2=dpmax[r2-(1<<kr)+1][c1][kr][kc];
int t3=dpmax[r1][c2-(1<<kc)+1][kr][kc];
int t4=dpmax[r2-(1<<kr)+1][c2-(1<<kc)+1][kr][kc];
return max(max(t1,t2),max(t3,t4));
}
int main()
{
int i,j,q,r1,r2,c1,c2;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&val[i][j]);
RMQ();
scanf("%d",&q);
while(q--)
{
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
int ans=query(r1,c1,r2,c2);
if(ans==val[r1][c1]||ans==val[r1][c2]||ans==val[r2][c1]||ans==val[r2][c2])
printf("%d yes\n",ans);
else
printf("%d no\n",ans);
}
}
return 0;
}