using System;
using System.Collections.Generic;
using System.Linq;

namespace Petlja3
{
    internal class Program
    {
        static int[,] PromeniPodniz(int[,] doha, int[,] najmanjiZbirPoljaPomocni, int[,] najboljiSmerOd, int x, int y, int n, int m)
        {
            int polje;
            int polje1;
            int polje2;
            if (x < n - 1)
            {
                if (najboljiSmerOd[x + 1, y] == 1)
                {
                    polje1 = najmanjiZbirPoljaPomocni[x, y];
                    if (y > 0)
                        polje2 = najmanjiZbirPoljaPomocni[x + 1, y - 1];
                    else
                        polje2 = -1;
                    polje = polje1;
                    if (polje == -1 || polje1 > polje2)
                    {
                        polje = polje2;
                        if (polje == -1)
                            najmanjiZbirPoljaPomocni[x + 1, y] = -1;
                        else
                            najmanjiZbirPoljaPomocni[x + 1, y] = polje + doha[x + 1, y];
                    }
                    else
                    {
                        polje = polje1;
                        najmanjiZbirPoljaPomocni[x + 1, y] = polje + doha[x + 1, y];
                    }
                }
                PromeniPodniz(doha, najmanjiZbirPoljaPomocni, najboljiSmerOd, x + 1, y, n, m);
            }
            if (y < m - 1)
            {
                if (najboljiSmerOd[x, y + 1] == 2)
                {
                    polje2 = najmanjiZbirPoljaPomocni[x, y];
                    if (x > 0)
                        polje1 = najmanjiZbirPoljaPomocni[x - 1, y + 1];
                    else
                        polje1 = -1;
                    polje = polje2;
                    if (polje == -1 || polje2 > polje1)
                    {
                        polje = polje1;
                        if (polje == -1)
                            najmanjiZbirPoljaPomocni[x, y + 1] = -1;
                        else
                            najmanjiZbirPoljaPomocni[x, y + 1] = polje + doha[x, y + 1];
                    }
                    else
                    {
                        polje = polje2;
                        najmanjiZbirPoljaPomocni[x, y + 1] = polje + doha[x, y + 1];
                    }
                }
                PromeniPodniz(doha, najmanjiZbirPoljaPomocni, najboljiSmerOd, x, y + 1, n, m);
            }
            return najmanjiZbirPoljaPomocni;
        }

        static void Main(string[] args)
        {
            string[] s1 = Console.ReadLine().Split(' ');
            int n = int.Parse(s1[0]);
            int m = int.Parse(s1[1]);
            int[,] doha = new int[n, m];
            for(int i = 0; i < n; i++)
            {
                string[] s2 = Console.ReadLine().Split(' ');
                for(int j = 0; j < m; j++)
                {
                    doha[i, j] = int.Parse(s2[j]);
                }
            }

            int[,] najmanjiZbirPolja = new int[n, m];
            int[,] najboljiSmerOd = new int[n, m];//1 je odozgo, 2 je sleva
            int[,] najboljiPutSmerDo = new int[n, m];//1 je dole, 2 je desno
            int polje1;
            int polje2;
            for(int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (i > 0 && j > 0)
                    {
                        polje1 = doha[i, j] + najmanjiZbirPolja[i - 1, j];
                        polje2 = doha[i, j] + najmanjiZbirPolja[i, j - 1];
                        if (polje1 <= polje2)
                        {
                            najmanjiZbirPolja[i, j] = polje1;
                            najboljiSmerOd[i, j] = 1;
                        }
                        else
                        {
                            najmanjiZbirPolja[i, j] = polje2;
                            najboljiSmerOd[i, j] = 2;
                        }
                    }
                    else if (i > 0)
                    {
                        najmanjiZbirPolja[i, j] = doha[i, j] + najmanjiZbirPolja[i - 1, j];
                        najboljiSmerOd[i, j] = 1;
                    }
                    else if (j > 0)
                    {
                        najmanjiZbirPolja[i, j] = doha[i, j] + najmanjiZbirPolja[i, j - 1];
                        najboljiSmerOd[i, j] = 2;
                    }
                    else
                        najmanjiZbirPolja[i, j] = doha[i, j];
                }
            }
            int kordX = n - 1;
            int kordY = m - 1;
            while(kordX > 0 || kordY > 0)
            {
                if (najboljiSmerOd[kordX, kordY] == 1)
                {
                    kordX--;
                    najboljiPutSmerDo[kordX, kordY] = 1;
                }
                else
                {
                    kordY--;
                    najboljiPutSmerDo[kordX, kordY] = 2;
                }
            }

            int q = int.Parse(Console.ReadLine());
            int[,] najmanjiZbirPoljaPomocni = new int[n, m];
            for (int p = 0; p < q; p++)
            {
                string[] s3 = Console.ReadLine().Split(' ');
                int x = int.Parse(s3[0]) - 1;
                int y = int.Parse(s3[1]) - 1;

                if (najboljiPutSmerDo[x, y] == 0)
                {
                    Console.WriteLine(najmanjiZbirPolja[n - 1, m - 1]);
                }
                else
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < m; j++)
                        {
                            najmanjiZbirPoljaPomocni[i, j] = najmanjiZbirPolja[i, j];
                        }
                    }
                    najmanjiZbirPoljaPomocni[x, y] = -1;
                    PromeniPodniz(doha, najmanjiZbirPoljaPomocni, najboljiSmerOd, x, y, n, m);
                    Console.WriteLine(najmanjiZbirPoljaPomocni[n - 1, m - 1]);
                }
            }
        }
    }
}