#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int DIM = 510;
const int LOG_DIM = 10;
int n, m, x, y, k;
int rmq[LOG_DIM][DIM][DIM], e[DIM];
int getMax(int a, int b, int c, int d) {
return max(max(a, b), max(c, d));
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
fin >> rmq[0][i][j];
for (int p = 1; (1 << p) <= n; p++) {
for (int i1 = 1; i1 <= n - (1 << p) + 1; i1++) {
for (int j1 = 1; j1 <= n - (1 << p) + 1; j1++) {
int i2 = i1 + (1 << (p - 1));
int j2 = j1 + (1 << (p - 1));
rmq[p][i1][j1] = getMax(rmq[p - 1][i1][j1],
rmq[p - 1][i1][j2],
rmq[p - 1][i2][j1],
rmq[p - 1][i2][j2]);
}
}
}
e[1] = 0;
for (int i = 2; i <= n; i++)
e[i] = 1 + e[i / 2];
for (int i = 1; i <= m; i++) {
fin >> x >> y >> k;
int exp = e[k], pow = (1 << exp);
int sol = getMax(rmq[exp][x][y],
rmq[exp][x][y + k - pow],
rmq[exp][x + k - pow][y],
rmq[exp][x + k - pow][y + k - pow]);
fout << sol << '\n';
}
return 0;
}