#include <bits/stdc++.h>

using namespace std;

struct covek
{
    pair<int, int> lokacija;
    int dosadBroj;
};

int main()
{
    int n, m;
    cin >> n >> m;

    int matricaNavijaca[n][m];
    int matricaNavijacaBrojDotle[n][m];

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            int brojNavijaca;
            cin >> brojNavijaca;
            matricaNavijaca[i][j] = brojNavijaca;
            matricaNavijacaBrojDotle[i][j] = -1;
        }
    }

    int q;
    cin >> q;

    for(int i = 0; i < q; i++)
    {
        int ti, tj;
        cin >> ti >> tj;
        ti--;
        tj--;

        queue<covek> kjuLokacija;
        kjuLokacija.push({{0, 0}, 0});
        while(kjuLokacija.size() > 0)
        {
            int lokacijaI = kjuLokacija.front().lokacija.first;
            int lokacijaJ = kjuLokacija.front().lokacija.second;
            if(matricaNavijacaBrojDotle[lokacijaI][lokacijaJ] == -1 || matricaNavijacaBrojDotle[lokacijaI][lokacijaJ] > kjuLokacija.front().dosadBroj)
            {
                matricaNavijacaBrojDotle[lokacijaI][lokacijaJ] = kjuLokacija.front().dosadBroj + matricaNavijaca[lokacijaI][lokacijaJ];
            }

            kjuLokacija.pop();

            if(lokacijaI + 1 < n)
            {
                if(lokacijaI + 1 == ti && lokacijaJ == tj)
                {

                }
                else
                    kjuLokacija.push({{lokacijaI + 1, lokacijaJ}, matricaNavijacaBrojDotle[lokacijaI][lokacijaJ]});
            }

            if(lokacijaJ + 1 < m)
            {
                if(lokacijaI == ti && lokacijaJ + 1 == tj)
                {

                }
                else
                    kjuLokacija.push({{lokacijaI, lokacijaJ + 1}, matricaNavijacaBrojDotle[lokacijaI][lokacijaJ]});
            }
        }

        cout << matricaNavijacaBrojDotle[n - 1][m - 1] << endl;
    }

    return 0;
}