#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[301][301], b[301][301], lin[1000001], col[1000001];
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
int lee (int x1, int y1, int x2, int y2, int n)
{
int i, j, x, y, p=1, r=1, nr;
memset(b,0,sizeof(b)); memset(lin,0,sizeof(lin)); memset(col,0,sizeof(col));
b[x1][y1]=a[x1][y1]; lin[1]=x1; col[1]=y1;
while (p<=r)
{
nr=r;
for (i=p; i<=r; i++)
{
for (j=0; j<4; j++)
{
x=lin[i]+dx[j];
y=col[i]+dy[j];
if (x<1 || y<1 || x>n || y>n) continue;
if (b[x][y]==0 || min(b[lin[i]][col[i]],a[x][y])>b[x][y])
{
b[x][y]=min(b[lin[i]][col[i]],a[x][y]);
lin[++nr]=x;
col[nr]=y;
}
}
}
p=r+1; r=nr;
}
return b[x2][y2];
}
int main()
{
int n, t, i, j, x1, y1, x2, y2, sol;
freopen("matrice2.in","r",stdin);
freopen("matrice2.out","w",stdout);
scanf("%d%d",&n,&t);
for (i=1; i<=n; i++)
for (j=1; j<=n; j++) scanf("%d",&a[i][j]);
for (i=1; i<=t; i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
sol=lee(x1,y1,x2,y2,n);
printf("%d\n",sol);
}
return 0;
}