#include <iostream>
#include <vector>

using namespace std;


int main()
{
    long long n,m,naj,x,y;
    cin >> n >> m;
    vector<vector<long long> > matrica(n,vector<long long>(m));
    vector<vector<long long> > odp(n,vector<long long>(m));
    vector<vector<long long> > odk(n,vector<long long>(m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >> matrica[i][j];
        }
    }
    odp[0][0]=matrica[0][0];
    odk[n-1][m-1]=matrica[n-1][m-1];
    for(int i=1;i<m;i++){
       odp[0][i]=odp[0][i-1]+matrica[0][i];
       odk[n-1][m-i-1]=odk[n-1][m-i]+matrica[n-1][m-i-1];
    }
    for(int i=1;i<n;i++){
       odp[i][0]=odp[i-1][0]+matrica[i][0];
       odk[n-i-1][m-1]=odk[n-i][m-1]+matrica[n-i-1][m-1];
    }
    for(int i=1;i<m;i++){
        for(int j=1;j<n;j++){
            if(odp[j][i-1]<odp[j-1][i]){
                odp[j][i]=odp[j][i-1]+matrica[j][i];
            }
            else{
                odp[j][i]=odp[j-1][i]+matrica[j][i];
            }
        }
    }
    for(int i=m-2;i>=0;i--){
        for(int j=n-2;j>=0;j--){
            if(odk[j][i+1]<odk[j+1][i]){
                odk[j][i]=odk[j][i+1]+matrica[j][i];
            }
            else{
                odk[j][i]=odk[j+1][i]+matrica[j][i];
            }
        }
    }
    /**for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout << odp[i][j] << " " ;
        }
        cout << endl;
    }
    cout << endl;
    for(int i=n-1;i>=0;i--){
        for(int j=m-1;j>=0;j--){
            cout << odk[i][j] << " " ;
        }
        cout << endl;
    }*/
    int q,leva,desna;
    bool prva;
    cin >> q;
    for(int i=0;i<q;i++){
        cin >> x >> y;
        x--; y--;
        prva=true;
        naj=0;
        if(n<m){// spustamo ze niz vertikalu
            if(y==m-1){
                leva=x;
            }
            else{
                leva=0;
            }
            if(y==0){
                desna=0;
            }
            else{
                desna=n;
            }
            for(int j=leva;j<x;j++){
                if(prva || odp[j][y]+odk[j][y+1]<naj){
                    naj=odp[j][y]+odk[j][y+1];
                    prva=false;
                }
            }
            y--;
            for(int j=x+1;j<desna;j++){
                if(prva || odp[j][y]+odk[j][y+1]<naj){
                    naj=odp[j][y]+odk[j][y+1];
                    prva=false;
                }
            }
        }
        else{
            if(x==0){
                leva=y;
            }
            else{
                leva=0;
            }
            if(x==0){
                desna=0;
            }
            else{
                desna=m;
            }
            for(int j=leva;j<y;j++){
                if(prva || odp[x][j]+odk[x+1][j]<naj){
                    naj=odp[x][j]+odk[x+1][j];
                    prva=false;
                }
            }
            x--;
            for(int j=y+1;j<desna;j++){
                if(prva || odp[x][j]+odk[x+1][j]<naj){
                    naj=odp[x][j]+odk[x+1][j];
                    prva=false;
                }
            }
        }
        cout << naj << endl;
    }
    //cout << "Hello world!" << endl;
    return 0;
}