#include <bits/stdc++.h>

#define MAXNM 1000100

using namespace std;

struct Polje
{
    long long int vrednost;
    long long int pocetak;
    long long int kraj;
};


struct Polje matrica[MAXNM];
int n,m,q,tacke[MAXNM];


void pocetak()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(i == 0 and j == 0)
            {
                matrica[0].pocetak = matrica[0].vrednost;
            }
            else
            {
                if(i == 0)
                {
                    matrica[j].pocetak = matrica[j].vrednost + matrica[j - 1].pocetak;
                }
                else
                {
                    if(j == 0)
                    {
                        matrica[m*i].pocetak = matrica[m*i].vrednost + matrica[m*(i-1)].pocetak;
                    }
                    else
                    {
                        if(matrica[m*i+j-1].pocetak <= matrica[m*(i-1)+j].pocetak)
                        {
                            matrica[m*i+j].pocetak = matrica[m*i+j].vrednost + matrica[m*i+j-1].pocetak;
                        }
                        else
                        {
                            matrica[m*i+j].pocetak = matrica[m*i+j].vrednost + matrica[m*(i-1)+j].pocetak;
                        }
                    }
                }
            }
        }
    }
}


void kraj()
{
    for(int i=n-1;i>=0;i--)
    {
        for(int j=m-1;j>=0;j--)
        {
            if(i == n-1 and j == m-1)
            {
                matrica[i*m+j].kraj = matrica[i*m+j].vrednost;
            }
            else
            {
                if(i == n-1)
                {
                    matrica[i*m + j].kraj = matrica[i*m + j].vrednost + matrica[i*m + j + 1].kraj;
                }
                else
                {
                    if(j == m-1)
                    {
                        matrica[i*m + j].kraj = matrica[i*m + j].vrednost + matrica[(i+1)*m + j].kraj;
                    }
                    else
                    {
                        if(matrica[i*m + j + 1].kraj <= matrica[(i+1)*m + j].kraj)
                        {
                            matrica[i*m + j].kraj = matrica[i*m+j].vrednost + matrica[i*m + j + 1].kraj;
                        }
                        else
                        {
                            matrica[i*m + j].kraj = matrica[i*m+j].vrednost + matrica[(i+1)*m + j].kraj;
                        }
                    }
                }
            }
        }
    }
}



void prekrivaPutic()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(matrica[i*m+j].pocetak + matrica[i*m + j].kraj - matrica[i*m + j].vrednost == matrica[0].kraj)
            {
                tacke[i+j]++;
            }
        }
    }
}


int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>matrica[m*i + j].vrednost;
        }
    }
    pocetak();
    kraj();
    prekrivaPutic();
    cin>>q;
    int x,y;
    for(int i=0;i<q;i++)
    {
        cin>>y>>x;
        x--;y--;
        if(matrica[y*m + x].pocetak + matrica[y*m + x].kraj - matrica[y*m + x].vrednost != matrica[0].kraj)
        {
            cout<<matrica[0].kraj<<endl;
        }
        else
        {
            if(tacke[x+y] > 1)
            {
                cout<<matrica[0].kraj<<endl;
            }
            else
            {
                long long int miny,s;
                bool postavljen = false;
                if(n < m)
                {
                    for(int i=0;i<n;i++)
                    {
                        int j = x+y-i;
                        if((j<0 or j >= m) or (i == y and j == x))
                        {
                            continue;
                        }
                        else
                        {
                            s = matrica[i*m + j].kraj + matrica[i*m + j].pocetak - matrica[i*m + j].vrednost;
                            if(postavljen == false or miny > s)
                            {
                                postavljen = true;
                                miny = s;
                            }
                        }
                    }
                }
                else
                {
                    for(int j=0;j<m;j++)
                    {
                        int i = x+y-j;
                        if((i<0 or i >= m) or (i == y and j == x))
                        {
                            continue;
                        }
                        else
                        {
                            s = matrica[i*m + j].kraj + matrica[i*m + j].pocetak - matrica[i*m + j].vrednost;
                            if(postavljen == false or miny > s)
                            {
                                postavljen = true;
                                miny = s;
                            }
                        }
                    }
                }

                cout<<miny<<endl;
            }
        }
    }
    return 0;
}