#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#define DEBUG 0
#define MAXN 500
#define LOGN 9
using namespace std;
int v[MAXN][MAXN], rmq[MAXN][MAXN][LOGN];
int main(){
int n, q;
ifstream fin ("plantatie.in");
fin >> n >> q;
for(int i = 0; i < n; i ++){
for(int j = 0; j < n; j ++){
fin >> v[i][j];
rmq[i][j][0] = v[i][j];
}
}
for(int pow = 1; (1 << pow) <= n; pow ++){
for(int i = 0; i + (1 << pow) <= n; i ++){
for(int j = 0; j + (1 << pow) <= n; j ++){
int prev = 1 << (pow - 1);
int maxv = max(0, rmq[i][j][pow - 1]);
maxv = max(maxv, rmq[i + prev][j][pow - 1]);
maxv = max(maxv, rmq[i][j + prev][pow - 1]);
maxv = max(maxv, rmq[i + prev][j + prev][pow - 1]);
rmq[i][j][pow] = maxv;
}
}
}
if(DEBUG){
for(int pow = 0; (1 << pow) <= n; pow ++){
printf("%d:\n", pow);
for(int i = 0; i + (1 << pow) <= n; i ++){
for(int j = 0; j + (1 << pow) <= n; j ++){
printf("%d ", rmq[i][j][pow]);
}
printf("\n");
}
printf("\n");
}
fflush(NULL);
}
ofstream fout ("plantatie.out");
for(int qi = 0; qi < q; qi ++){
int a, b, c;
fin >> a >> b >> c; // Query in patratul ((a, b), (a + c, b + c))
a --;
b --;
int pow = log2(c);
int maxv = max(0, rmq[a][b][pow]);
maxv = max(maxv, rmq[a + c - (1 << pow)][b][pow]);
maxv = max(maxv, rmq[a][b + c - (1 << pow)][pow]);
maxv = max(maxv, rmq[a + c - (1 << pow)][b + c - (1 << pow)][pow]);
fout << maxv << "\n";
}
fin.close();
fout.close();
return 0;
}