#include <bits/stdc++.h>

using namespace std;

int n, m, q, x, y;
struct slog {
       int prvi, drugi, c;
       bool operator <(const slog &a) const{
            return c > a.c;
       }
}sl, sl2;
priority_queue <slog> Q;
long long a[5000][5000], idx[5000][5000];

int dijkstra () {
    sl.prvi = 1;
    sl.drugi = 1;
    sl.c = a[1][1];
    Q.push(sl);
    idx[1][1] = 1;
    while(Q.size()) {
          sl = Q.top();
          //cout << "top je " << sl.prvi << "," << sl.drugi << endl;
          if (sl.prvi == n && sl.drugi == m) {
                cout << sl.c << endl;
                break;
          }
          if (idx[sl.prvi+1][sl.drugi] == 0){
              sl2.prvi = sl.prvi + 1;
              sl2.drugi = sl.drugi;
              sl2.c = a[sl2.prvi][sl2.drugi] + sl.c;
              Q.push(sl2);
              //cout << "pushovao " << sl2.prvi << "," << sl2.drugi << endl;
          }
          if (idx[sl.prvi-1][sl.drugi] == 0){
              sl2.prvi = sl.prvi - 1;
              sl2.drugi = sl.drugi;
              sl2.c = a[sl2.prvi][sl2.drugi] + sl.c;
              Q.push(sl2);
              //cout << "pushovao " << sl2.prvi << "," << sl2.drugi << endl;
          }
          if (idx[sl.prvi][sl.drugi+1] == 0){
              sl2.prvi = sl.prvi;
              sl2.drugi = sl.drugi+1;
              sl2.c = a[sl2.prvi][sl2.drugi] + sl.c;
              Q.push(sl2);
              //cout << "pushovao " << sl2.prvi << "," << sl2.drugi << endl;
          }
          if (idx[sl.prvi][sl.drugi-1] == 0){
              sl2.prvi = sl.prvi;
              sl2.drugi = sl.drugi-1;
              sl2.c = a[sl2.prvi][sl2.drugi] + sl.c;
              Q.push(sl2);
              //cout << "pushovao " << sl2.prvi << "," << sl2.drugi << endl;
          }
          idx[sl.prvi][sl.drugi] = 1;
          Q.pop();

    }
}

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;

    for (int i = 1; i <= n; i++) {
         for (int i2 = 1; i2 <= m; i2++) {
              cin >> a[i][i2];
         }
    }
    cin >> q;

    while(q--){
          memset(idx,0,sizeof(idx));
          cin >> x >> y;
          idx[x][y] = 1;
          for(int i=0;i<=n+1;i++){idx[i][0]=1;idx[i][m+1]=1;}
          for(int i=0;i<=m+1;i++){idx[0][i]=1;idx[n+1][i]=1;}
          dijkstra();
          /*for (int i = 0; i <= n+1; i++) {
             for (int i2 = 0; i2 <= m+1; i2++) {
                  cout << idx[i][i2];
             }
             cout << endl;
          }*/

    }

return 0;
}