#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int LMAX = 9;
const int NMAX = 501;
int rmq[LMAX][NMAX][NMAX], lg[NMAX];
int query(int x, int y, int l)
{
int i = lg[l];
int X = x + l - (1 << i), Y = y + l - (1 << i);
return max({rmq[i][x][y], rmq[i][X][y], rmq[i][x][Y], rmq[i][X][Y]});
}
int main()
{
int n, m, k;
fin >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
fin >> rmq[0][i][j];
for (int i = 2; i <= n; ++i)
lg[i] = lg[i >> 1] + 1;
for (int l = 1; (1 << l) <= n; ++l)
for (int i = 1; i + (1 << l) - 1 <= n; ++i)
for (int j = 1; j + (1 << l) - 1 <= n; ++j)
rmq[l][i][j] = max({rmq[l - 1][i][j],
rmq[l - 1][i][j + (1 << (l - 1))],
rmq[l - 1][i + (1 << (l - 1))][j],
rmq[l - 1][i + (1 << (l - 1))][j + (1 << (l - 1))]});
int l, x, y;
while (m--)
{
fin >> x >> y >> l;
fout << query(x, y, l) << '\n';
}
return 0;
}