#include <stdio.h>
#define NMAX 514
FILE *f = fopen("plantatie.in","rt"), *g = fopen("plantatie.out","wt");
long int a[NMAX][NMAX],i,j,k,n,x1,y1,x2,y2,l,m,sol;
struct nod{long int max,x1,y1,x2,y2;} arb[NMAX*NMAX*3];
void citire()
{
fscanf(f,"%ld %ld",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
fscanf(f,"%ld",&a[i][j]);
k=1;
while (k<n) k*=2;
for (i=n+1;i<=k;i++)
for (j=n+1;j<=k;j++)
a[i][j]=0;
}
long int MAXX(long int a, long int b)
{
if (a<b) return b;
return a;
}
void build(long int nod, long int x1, long int y1, long int x2,long int y2)
{
long int midx,midy;
if ((x1==x2)&&(y1==y2)) {
arb[nod].max=a[x1][y1];
arb[nod].x1=x1;
arb[nod].x2=x2;
arb[nod].y1=y1;
arb[nod].y2=y2;
}
else
{
midx=(x1+x2)/2;
midy=(y1+y2)/2;
build(nod*4,x1,y1,midx,midy);
build(nod*4+1,midx+1,y1,x2,midy);
build(nod*4+2,x1,midy+1,midx,y2);
build(nod*4+3,midx+1,midy+1,x2,y2);
arb[nod].x1=x1;
arb[nod].x2=x2;
arb[nod].y1=y1;
arb[nod].y2=y2;
arb[nod].max=-1;
arb[nod].max=MAXX(arb[nod].max,arb[nod*4].max);
arb[nod].max=MAXX(arb[nod].max,arb[nod*4+1].max);
arb[nod].max=MAXX(arb[nod].max,arb[nod*4+2].max);
arb[nod].max=MAXX(arb[nod].max,arb[nod*4+3].max);
}
}
int incl(long int nod, long int a, long int b, long int c, long int d)
{
long int x1,x2,y1,y2,ok1=0,ok2=0;
x1=arb[nod].x1;
x2=arb[nod].x2;
y2=arb[nod].y2;
y1=arb[nod].y1;
if (((a<=x1)&&(x1<=c))&&((b<=y1)&&(y1<=d))) ok1=1;
if (((a<=x2)&&(x2<=c))&&((b<=y2)&&(y2<=d))) ok2=1;
if (ok1&&ok2) return 1;
return 0;
}
int inter(long int nod, long int a, long int b, long int c, long int d)
{
long int x1,x2,y1,y2,ok1=0,ok2=0;
x1=arb[nod].x1;
x2=arb[nod].x2;
y2=arb[nod].y2;
y1=arb[nod].y1;
if (((x1<=a)&&(a<=x2))&&((y1<=b)&&(b<=y2))) ok1=1;
if (((x1<=c)&&(c<=x2))&&((y1<=d)&&(d<=y2))) ok1=1;
if (ok1||ok2) return 1;
return 0;
}
void query(long int nod, long int a, long int b, long int c, long int d)
{
if (incl(nod,a,b,c,d)) sol=MAXX(sol,arb[nod].max);
else
if (inter(nod,a,b,c,d))
{
query(nod*4,a,b,c,d);
query(nod*4+1,a,b,c,d);
query(nod*4+2,a,b,c,d);
query(nod*4+3,a,b,c,d);
}
}
int main()
{
citire();
build(1,1,1,k,k);
for (i=1;i<=m;i++)
{
fscanf(f,"%ld %ld %ld",&x1,&y1,&l);
x2=x1+l-1;
y2=y1+l-1;
sol=0;
query(1,x1,y1,x2,y2);
fprintf(g,"%ld\n",sol);
}
fclose(f);
fclose(g);
return 0;
}