using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace guzva
{
    //public class pol
    //{
    //    public int i;
    //    public int j;
    //}

    internal class Program
    {   
        static void pisi(int[,]a)
        {
            for(int i=0;i<a.GetLength(0);i++)
            {
                for(int j=0;j<a.GetLength(1);j++)
                {
                    Console.Write(a[i, j] + " ");
                }
                Console.WriteLine();
            }
        }
        struct pol
        {
            public int i;
            public int j;
        }
        static bool p(int[,] a, int i, int j)
        {
            if(i<a.GetLength(0)&&j<a.GetLength(1)&&i>-1&&j>-1)
                return true;
            return false;
        }
        static bool poredi(pol a, pol b)
        {
            if(a.i==b.i&&a.j==b.j) return true;
            return false;
        }
        static void komsije(int[,] a, pol zab,pol pol,ref  List<pol> k,ref int[,] z)
        {
            pol pol1;
            pol1.i = pol.i + 1;
            pol1.j = pol.j;
            if (p(a,pol.i+1,pol.i)&& !poredi(pol1, zab) && z[pol1.i,pol1.j]==0)
            {
                z[pol1.i, pol1.j] = 1;
                k.Add(pol1);
            }
            //pol1.i = pol.i - 1;
            //pol1.j = pol.j;
            //if (p(a, pol.i - 1, pol.j) && !poredi(pol1, zab) && z[pol.i-1,pol.j]==0)
            //{
            //    z[pol.i - 1, pol.j] = 1;

            //    komsije.Add(pol1);
            //}
            pol1.i = pol.i;
            pol1.j = pol.j+1;
            if (p(a, pol.i , pol.j+1) && !poredi(pol1, zab) && z[pol1.i, pol1.j] == 0)
            {
                z[pol1.i, pol1.j] = 1;
                k.Add(pol1);
            }
            //pol1.i = pol.i ;
            //pol1.j = pol.j-1;
            //if (p(a, pol.i, pol.j - 1) && !poredi(pol1, zab) && z[pol.i,pol.j-1]==0)
            //{
            //    z[pol.i, pol.j - 1] = 1;
            //    komsije.Add(pol1);
            //}
        }
        static pol min(pol a, pol b, int[,] c)
        {
            if (c[a.i, a.j] > c[b.i, b.j])
                return a;
            return b;
        }
        static void broj(int[,] a, pol pol, pol zab, List<pol> k,ref int[,] z, int n, int m,int br,ref int min)
        {
            k= new List<pol>();
            komsije(a, zab, pol, ref k,ref z);
            z[n-1, m-1] = 0;
            //pisi(z);
            //Console.WriteLine();
            //Console.WriteLine(k.Count);
            if (k.Count>0)
            {
                for (int i=0;i<k.Count;i++)
                {
                    //Console.WriteLine(k.Count+" mdmaaa");
                    //Console.WriteLine(br+" ekser");
                    //Console.WriteLine(k[i].i + " " + k[i].j);
                    //if (k.Count > 0)
                    {
                        pol x = k[i];

                        //k.RemoveAt(0);
                        //Console.WriteLine(x.i + " mdma " + x.j);
                        //k.ToArray();
                        //Console.WriteLine((n-1)+" mdma"+ (m-1)+ "mdma");
                        if (x.i == n - 1 && x.j == m - 1)
                        {   
                            if(br + a[x.i, x.j]<min)
                            {
                                min = br + a[x.i, x.j] ;
                                //Console.WriteLine(min);
                            }
                            //Console.WriteLine(br + a[x.i, x.j]);
                        }
                        //Console.WriteLine(x.i + " " + x.j + " " + br);

                        broj(a, x, zab,  k, ref z, n, m, br + a[x.i, x.j],ref min);
                        z[x.i, x.j] = 0;
                    }
                    //else
                       // return;
                }
            }
             
        }
        static void Main(string[] args)
        {
            //int[,] a = { { 1, 2, 3,4 }, {  5, 6 ,7,8}, { 9 ,10,11,12} };
            string[]red =Console.ReadLine().Split(' ');
            int n= int.Parse(red[0]);
            int m = int.Parse(red[1]);
            int[,]a=new int[n,m];
            for (int i = 0; i < n ; i++)
            {
                red= Console.ReadLine().Split(' ');
                for(int j=0;j<m;j++)
                {
                    a[i,j] = int.Parse(red[j]);
                }
            }
            int q=int.Parse(Console.ReadLine());
            pol[] zabranjeno= new pol[q];
            for(int i=0;i<q;i++)
            {
                red=Console.ReadLine().Split(' ');
                zabranjeno[i].i= int.Parse(red[0]);
                zabranjeno[i].j= int.Parse(red[1]);
            }
            pol p;
            p.i = 0;
            p.j = 0;
            //int[,] niz = new int[3, 4];
            List<pol> k = new List<pol>();
            //komsije(a, z, p, ref k,ref zab);
            for (int i = 0; i < q; i++)
            {

                int[,] zab= new int[n,m];
                int min = int.MaxValue;
                pol z = zabranjeno[i];
                z.i--;
                z.j--;
                //pisi(zab);
                broj(a, p, z, k, ref zab, a.GetLength(0), a.GetLength(1), a[0, 0], ref min);
                Console.WriteLine(min);
            }
           // Console.WriteLine(niz[1, 0]);
        }
    }
}