#include <bits/stdc++.h>
using namespace std;
const int dx[4] = {0 , 0 , 1 , -1};
const int dy[4] = {1 , -1 , 0 , 0};
const int Nmax = 300 + 10;
const int Qmax = 2 * 1e4 + 10;
int n , Q , val , i , j;
int T[Nmax*Nmax];
int ans[Qmax];
bool bagat[Nmax*Nmax];
pair < int , int > m[Qmax];
vector < pair < int , int > > v;
vector < int > keep[Nmax*Nmax];
int code(int x , int y);
void get(int z , int &x , int &y);
int multime(int node)
{
if (node != T[node])
T[node] = multime(T[node]);
return T[node];
}
void uneste(int x , int y)
{
x = multime(x); y = multime(y);
if (x == y) return;
if (keep[x].size() < keep[y].size())
swap(x , y);
T[y] = x;
for (auto &it : keep[y])
{
keep[x].push_back(it);
if (!it) continue;
if (ans[it]) continue;
int ff , ss;
tie(ff , ss) = m[it];
if (multime(ff) == multime(ss))
ans[it] = val;
}
keep[y].clear();
}
bool limits(int x , int y)
{
if (x < 1 || y < 1 || x > n || y > n)
return 0;
return 1;
}
int main()
{
freopen("matrice2.in","r",stdin);
freopen("matrice2.out","w",stdout);
scanf("%d %d", &n, &Q);
int maxx = 0;
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
{
int x;
scanf("%d", &x);
v.push_back({x,code(i,j)});
maxx = max(maxx , x);
}
sort(v.begin() , v.end());
for (i = 1; i <= Q; ++i)
{
int x0 , x1 , y0 , y1;
scanf("%d %d %d %d", &x0 , &y0 , &x1 , &y1);
keep[code(x0,y0)].push_back(i);
keep[code(x1,y1)].push_back(i);
m[i] = {code(x0,y0) , code(x1,y1)};
}
for (i = 1; i <= n * n; ++i)
bagat[i] = 0, T[i] = i;
auto it = v.rbegin();
for (auto p = v.rbegin(); p != v.rend(); p = it)
{
it = p;
for (it = p ; it != v.rend(); ++it)
{
if (it -> first != p -> first)
break;
int x , y; val = it -> first;
get(it -> second , x , y);
bagat[code(x,y)] = 1;
for (int dir = 0; dir < 4; ++dir)
{
int xx = x + dx[dir];
int yy = y + dy[dir];
if (!limits(xx,yy)) continue;
if (!bagat[code(xx,yy)]) continue;
uneste(it -> second , code(xx,yy));
}
}
}
for (i = 1; i <= Q; ++i)
printf("%d\n", ans[i]);
return 0;
}
int code(int x , int y)
{
return (x - 1) * n + y;
}
void get(int z , int &x , int &y)
{
if (z % n)
{
x = z / n + 1;
y = z % n;
}
else
{
x = z / n;
y = n;
}
}