#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int nr, N, M, t[90009], ap[90009], ans[20009], x[20009], y[20009], auxx[20009], auxy[20009], prefer[20009], ind[20009], cod[309][309], a[309][309];
vector < int > edges[90009];
pair < int , int > v[90009];
int tata (int x)
{
if (t[x] == x)
return x;
return t[x] = tata (t[x]);
}
void unite (int x, int y)
{
x = tata (x), y = tata (y);
if (x != y)
t[x] = y;
}
void baga (int nod)
{
for (vector < int > :: iterator it = edges[nod].begin (); it != edges[nod].end (); it ++)
if (ap[*it])
unite (nod, *it);
ap[nod] = 1;
}
void Clear ()
{
for (int i=1; i<=nr; i++)
t[i] = i, ap[i] = 0;
}
void add_edge (int x, int y)
{
edges[x].push_back (y);
edges[y].push_back (x);
}
int main ()
{
freopen ("matrice2.in", "r", stdin);
freopen ("matrice2.out", "w", stdout);
scanf ("%d %d", &N, &M);
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
cod[i][j] = ++nr;
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
{
if (i < N)
add_edge (cod[i][j], cod[i+1][j]);
if (j < N)
add_edge (cod[i][j], cod[i][j+1]);
}
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
scanf ("%d", &a[i][j]), v[cod[i][j]].first = a[i][j], v[cod[i][j]].second = cod[i][j];
sort (v + 1, v + nr + 1);
reverse (v + 1, v + nr + 1);
for (int i=1; i<=M; i++)
{
int a1, b1, a2, b2;
scanf ("%d %d %d %d", &a1, &b1, &a2, &b2);
x[i] = cod[a1][b1], y[i] = cod[a2][b2], ind[i] = i;
}
for (int curr_i=19; curr_i>=0; curr_i--)
{
Clear ();
int add = 1 << curr_i, p = 1;
for (int i=1; i<=M; i++)
{
while (p <= nr && v[p].first >= ans[ind[i]] + add)
baga (v[p++].second);
if (tata (x[ind[i]]) == tata (y[ind[i]]))
prefer[i] = 1, ans[ind[i]] += add;
else
prefer[i] = 0;
}
int lx = 0, ly = 0, py = 1, l = 0;
for (int i=1; i<=M; i++)
if (prefer[i])
auxx[++lx] = ind[i];
else
auxy[++ly] = ind[i];
for (int i=1; i<=lx; i++)
{
while (ans[auxy[py]] >= ans[auxx[i]] && py <= ly)
ind[++l] = auxy[py++];
ind[++l] = auxx[i];
}
while (py <= ly)
ind[++l] = auxy[py++];
if (ans[ind[1]] < ans[ind[2]])
printf ("kkt\n");
}
for (int i=1; i<=M; i++)
printf ("%d\n", ans[i]);
return 0;
}