#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define PI acos(-1)
#define LSB(i) ((i) & -(i))
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define sc second
#define th third
#define fo fourth
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ldb double
#define MOD 1000000007
#define endl "\n"

#define all(data)       data.begin(),data.end()
#define TYPEMAX(type)   std::numeric_limits<type>::max()
#define TYPEMIN(type)   std::numeric_limits<type>::min()
#define ima_li_te(D,d)  find(all(D),d)
int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    ll n,m; cin>>n>>m;
    ll a[n+1][m+1];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    ll q; cin>>q;
    ll x[q],y[q];
    for(int i=0;i<q;i++) cin>>x[i]>>y[i];
    ll dp1[n+1][m+1],dp2[n+1][m+1];
    dp1[1][1]=a[1][1];
    for(int i=2;i<=m;i++) dp1[1][i]=a[1][i]+dp1[1][i-1];
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            dp1[i][j]=a[i][j]+dp1[i-1][j];
            if(j!=1) dp1[i][j]=min(dp1[i][j],a[i][j]+dp1[i][j-1]);
        }
    }
    dp2[n][m]=a[n][m];
    for(int i=m-1;i>=1;i--) dp2[n][i]=a[n][i]+dp2[n][i+1];
    for(int i=n-1;i>=1;i--)
    {
        for(int j=m;j>=1;j--)
        {
            dp2[i][j]=a[i][j]+dp2[i+1][j];
            if(j!=m) dp2[i][j]=min(dp2[i][j],a[i][j]+dp2[i][j+1]);
        }
    }
    ll dist[n+1][m+1],pref1[n+1][m+1],pref2[n+1][m+1];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) dist[i][j]=dp1[i][j]+dp2[i][j]-a[i][j];
    }
    for(int i=1;i<=n;i++)
    {
        pref1[i][1]=dist[i][1];
        for(int j=2;j<=m;j++) pref1[i][j]=min(dist[i][j],pref1[i][j-1]);
    }
    for(int j=1;j<=m;j++)
    {
        pref2[1][j]=dist[1][j];
        for(int i=2;i<=n;i++) pref2[i][j]=min(dist[i][j],pref2[i-1][j]);
    }
    for(int i=0;i<q;i++)
    {
        ll rez=LLONG_MAX;
        if(x[i]!=n && y[i]!=1) rez=min(rez,pref1[x[i]+1][y[i]-1]);
        if(x[i]!=1 && y[i]!=m) rez=min(rez,pref2[x[i]-1][y[i]+1]);
        cout<<rez<<endl;
    }
    return 0;
}