#include <bits/stdc++.h>
using namespace std;
const int LMAX = 11;
const int NMAX = 502;
int n,q,v[NMAX][NMAX],rmq[LMAX][NMAX][NMAX];
int max(vector<int> v){
int ans = 0;
for(int it: v){
ans = max(ans, it);
}
return ans;
}
int main()
{
cin >> n >> q;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
cin >> v[i][j];
rmq[0][i][j] = v[i][j];
}
}
for(int k = 1; k < LMAX; k++){
for(int i = 1; i+(1<<(k-1)) <= n; i++){
for(int j = 1; j+(1<<(k-1)) <= n; j++){
rmq[k][i][j] = max({rmq[k-1][i][j], rmq[k-1][i+(1<<(k-1))][j],
rmq[k-1][i][j+(1<<(k-1))], rmq[i+(1<<(k-1))][j+(1<<(k-1))]});
}
}
}
auto query = [&](int x, int y, int lat) -> int {
int lg = __lg(lat);
return max({rmq[lg][x][y], rmq[lg][x-(1<<lg)+1][y], rmq[lg][x][y-(1<<lg)+1],
rmq[lg][x-(1<<lg)+1][y-(1<<lg)+1]});
}
while(q--){
int x, y, lat;
cin >> x >> y >> lat;
cout << query(x, y, lat) << "\n";
}
return 0;
}