#include<stdio.h>
int n,m,i,j,k,l,ll,
b[512],c[512],a[10][512][512],
query(),max4(int aa,int bb,int cc,int dd);
void readd(),solve();
int main()
{
readd();
solve();
return 0;
}
void readd()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[0][i][j]);
}
void solve()
{
for(l=2,k=1;l<n;l<<=1,k++)
{
ll=l>>1;
for(i=1;i<=n-l+1;i++)
for(j=1;j<=n-l+1;j++)
a[k][i][j]=max4(a[k-1][i][j],a[k-1][i+ll][j],a[k-1][i][j+ll],a[k-1][i+ll][j+ll]);
}
for(i=1;i<9;i++)c[(1<<i)+1]=1;
for(i=3;i<512;i++)c[i]+=c[i-1];
for(i=2;i<512;i++)b[i]=1<<c[i];
for(;m;m--)
{
scanf("%d%d%d",&i,&j,&l);
printf("%d\n",query());
}
}
int query()
{
if(l==1)return a[0][i][j];
int ii=i+l-b[l],jj=j+l-b[l],k=c[l];
return max4(a[k][i][j],a[k][ii][j],a[k][i][jj],a[k][ii][jj]);
}
int max4(int aa,int bb,int cc,int dd)
{
aa=(aa>cc)?aa:cc;
bb=(bb>dd)?bb:dd;
return (aa>bb)?aa:bb;
}