#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
#define INPUT "matrice2.in"
#define OUTPUT "matrice2.out"
#define pb push_back
#define mp make_pair
#define SET(X) memset(X, 0, sizeof(X))
const int NMAX = 301;
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
int N, X1, Y1, X2, Y2;
long Q;
int V[ NMAX ][ NMAX ];
bool viz[ NMAX ][ NMAX ];
vector<pair<pair<int, int>, int> > Deq;
void readData()
{
fscanf(fin, "%d %ld", &N, &Q);
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= N; ++j)
fscanf(fin, "%ld", &V[ i ][ j ]);
}
void solve()
{
SET(viz);
Deq.clear();
Deq.pb(mp(mp(X1, Y1), 1));
int ok = true;
long maxim = -1;
long minim = V[ X1 ][ Y1 ];
long XP, YP;
vector<pair<pair<int, int>, int> >::iterator it;
long cont = 0;
while(ok && cont < N*N)
{
++cont;
maxim = V[(*Deq.begin()).first.first][(*Deq.begin()).first.second];
for(it = Deq.begin(); it != Deq.end(); ++it)
if(V[(*it).first.first][(*it).first.second] > maxim && (*it).second != 1)
maxim = V[(*it).first.first][(*it).first.second];
if(maxim < minim) minim = maxim;
for(it = Deq.begin(); it != Deq.end(); ++it)
if(maxim == V[(*it).first.first][(*it).first.second] && (*it).second != 1) (*it).second = 1, XP = (*it).first.first, YP = (*it).first.second;
fprintf(stderr, "%ld \n", minim);
//Up
if(!viz[ XP ][ YP-1 ])
{
Deq.pb(mp(mp(XP, YP-1), 0));
if(XP == X2 && YP-1 == Y2)
{
fprintf(fout, "%ld\n", minim);
}
}
//Down
if(!viz[ XP ][ YP+1 ])
{
Deq.pb(mp(mp(XP, YP+1), 0));
if(XP == X2 && YP+1 == Y2)
{
fprintf(fout, "%ld\n", minim);
}
}
//Left
if(!viz[ XP-1 ][ YP ])
{
Deq.pb(mp(mp(XP-1, YP), 0));
if(XP-1 == X2 && YP == Y2)
{
fprintf(fout, "%ld\n", minim);
}
}
//Right
if(!viz[ XP+1 ][ YP ])
{
Deq.pb(mp(mp(XP+1, YP), 0));
if(XP+1 == X2 && YP == Y2)
{
fprintf(fout, "%ld\n", minim);
}
}
ok = false;
for(it = Deq.begin(); it != Deq.end(); ++it)
if((*it).second == 0){ ok = true; break;}
}
if(cont == N*N) fprintf(fout, "%ld\n", minim);
}
int main()
{
readData();
for(;Q--;)
{
fscanf(fin, "%d %d %d %d", &X1, &Y1, &X2, &Y2);
solve();
}
fclose(fin);
fclose(fout);
return 0;
}