#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int lookup[505][505][26];
int n,m;
int M[505][505];
void Precalculare() {
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
lookup[i][j][0] = M[i][j];
for(int k=1; (1 << k) <= n; k++) {
for(int i = 1; i + (1 << k) - 1 <= n; i++)
for(int j = 1; j + (1 << k) -1 <=n; j++) {
int p = 1<<k;
lookup[i][j][k] = max(max(lookup[i][j][k-1], lookup[i][j + p / 2][k-1]), max(lookup[i + p/2][j][k-1], lookup[i + p / 2][j + p / 2][k-1]));
}
}
}
int main() {
int lin, col, lat;
fin >> n >> m;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) {
fin >> M[i][j];
}
Precalculare();
for(int i = 0; i < m; i++) {
fin >> lin >> col >> lat;
int k = int(log2(lat));
int p = 1 << k;
int prod_max = max(max(lookup[lin][col][k], lookup[lin][col + lat - p][k]), max(lookup[lin + lat - p][col][k], lookup[lin + lat - p][col + lat - p][k]));
fout << prod_max << "\n";
}
return 0;
}