#include <cstdio>
#include <cstring>
#define file_in "matrice2.in"
#define file_out "matrice2.out"
#define Nmax 310
#define Inf 0x3f3f3f3f
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
int n,m;
int a[Nmax][Nmax];
int x1,y1,x2,y2;
int viz[Nmax][Nmax];
inline int min(int a, int b) { return a<b?a:b; }
int bfs(int x1, int y1, int x2, int y2)
{
int xx,yy,lne,cne;
int cost[Nmax][Nmax];
int x[Nmax*Nmax],y[Nmax*Nmax];
int p,u;
memset(cost,0,sizeof(cost));
memset(viz,0,sizeof(viz));
cost[x1][y1]=a[x1][y1];
viz[x1][y1]=1;
p=0;
u=0;
x[0]=x1;
y[0]=y1;
while(p<=u)
{
xx=x[p];
yy=y[p];
viz[xx][yy]=0;
for (int k=0;k<4;++k)
{
lne=xx+dx[k];
cne=yy+dy[k];
if (lne>=1 && lne<=n && cne>=1 && cne<=n)
if (cost[lne][cne]<min(a[lne][cne],cost[xx][yy]))
{
cost[lne][cne]=min(a[lne][cne],cost[xx][yy]);
if (!viz[lne][cne])
{
viz[lne][cne]=1;
u++;
x[u]=lne;
y[u]=cne;
}
}
}
p++;
}
return cost[x2][y2];
}
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n,&m);
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
scanf("%d", &a[i][j]);
while(m--)
{
scanf("%d %d %d %d", &x1,&y1,&x2,&y2);
printf("%d\n", bfs(x1,y1,x2,y2));
}
fclose(stdin);
fclose(stdout);
return 0;
}