#include <cstdio>
#include <algorithm>
using namespace std;
const int pmax=90023,nmax=323,qmax=10023;
int v[nmax][nmax],vis[nmax][nmax],tata[pmax],ct[pmax],cine[nmax][nmax],ind,sol[qmax];
int px[]={1,-1,0,0},py[]={0,0,1,-1};
struct s1
{
int p1;
int p2;
int p3;
int p4;
int baza;
int pos;
}qr[qmax];
int comps1(const s1 &a,const s1 &b)
{
return a.baza>b.baza;
}
struct s2
{
int p1;
int p2;
int val;
}vls[pmax];
int comps2(const s2 &a,const s2&b)
{
return a.val<b.val;
}
int n,q,m;
void reset_dads()
{
for(int i=1;i<=m;i++) ct[i]=0,tata[i]=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++) vis[i][j]=0;
}
}
int tabs(int a)
{
while(tata[a]!=0)
{
if(tata[a]==a) return a;
a=tata[a];
}
return a;
}
void connect(int a,int b)
{
a=tabs(a),b=tabs(b);
if(a==b) return;
if(ct[a]>=ct[b])
{
tata[b]=a;
ct[a]=max(ct[a],ct[b]+1);
}
else
{
tata[a]=b;
ct[b]=max(ct[b],ct[a]+1);
}
}
void go_to(int nr)
{
while(1)
{
// if(nr==8) printf("AA%d %d\n",vls[ind].val,ind);
if(ind==0||vls[ind].val<nr) break;
vis[vls[ind].p1][vls[ind].p2]=1;
for(int i=0;i<4;i++)
{
int pa=vls[ind].p1+px[i],pb=vls[ind].p2+py[i];
if(vis[pa][pb]==1) connect(cine[vls[ind].p1][vls[ind].p2],cine[pa][pb]);
}
--ind;
}
}
int main()
{
freopen ("matrice2.in","r",stdin);
freopen ("matrice2.out","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&v[i][j]);
vls[++m].p1=i,vls[m].p2=j,vls[m].val=v[i][j];
cine[i][j]=m;
// printf("%d ",cine[i][j]);
}
// printf("\n");
}
for(int i=1;i<=q;i++)
{
scanf("%d%d%d%d",&qr[i].p1,&qr[i].p2,&qr[i].p3,&qr[i].p4);
qr[i].pos=i;
}
sort(vls+1,vls+m+1,comps2);
for(int br=3;br>=0;--br)
{
sort(qr+1,qr+q+1,comps1);
reset_dads(),ind=m;
for(int i=1;i<=q;i++)
{
go_to(qr[i].baza+(1<<br));
/* printf("%d\n",qr[i].baza+(1<<br));
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++) printf("%d ",vis[j][k]);
printf("\n");
}
printf("%d %d %d %d",qr[i].p1,qr[i].p2,qr[i].p3,qr[i].p4);
*/ if(tabs(cine[qr[i].p1][qr[i].p2])==tabs(cine[qr[i].p3][qr[i].p4])){/*printf("+%d",1<<br);*/ qr[i].baza+=(1<<br);}
// printf("\n");
}
}
for(int i=1;i<=q;i++) sol[qr[i].pos]=qr[i].baza;
for(int i=1;i<=q;i++) printf("%d\n",sol[i]);
}