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

class program
{
    static void Main()
    {
        var NM = Console.ReadLine().Split(' ');

        int N = int.Parse(NM[0]);
        int M = int.Parse(NM[1]);
        ulong[,] navijaci = new ulong[N, M];
        ulong[,] zbirovi = new ulong[N, M];
        ulong[,] novi_zbirovi = new ulong[N, M]; ;
        for (int i=0; i<N; i++)
        {
            var red = Console.ReadLine().Split(' ');
            for (int j = 0; j < M; j++)
            {
                navijaci[i, j] = ulong.Parse(red[j]);
                if(i !=0 && j != 0)
                {
                    zbirovi[i, j] = Math.Min(zbirovi[i-1, j], zbirovi[i, j-1]) + navijaci[i, j];
                }
                else
                {
                    if(i == 0 && j == 0)
                    {
                        zbirovi[i, j] = navijaci[i, j];
                    }
                    else if(i == 0)
                    {
                        zbirovi[i, j] = zbirovi[i, j - 1] + navijaci[i, j];
                    }
                    else
                    {
                        zbirovi[i, j] = zbirovi[i - 1, j] + navijaci[i, j];
                    }

                }
                novi_zbirovi[i, j] = zbirovi[i, j];
            }
        }
        int Q = int.Parse(Console.ReadLine());
        for (int k = 0; k < Q; k++)
        {
            var XY = Console.ReadLine().Split(' ');
            int x = int.Parse(XY[0]) - 1;
            int y = int.Parse(XY[1]) - 1;
            for (int i = x; i < N; i++)
            {
                for (int j = y; j < M; j++)
                {
                    if(i == x && j == y)
                    {
                        novi_zbirovi[x, y] = ulong.MaxValue;
                    }
                    else if (i != 0 && j != 0)
                    {
                        novi_zbirovi[i, j] = Math.Min(novi_zbirovi[i - 1, j], novi_zbirovi[i, j - 1]) + navijaci[i, j];
                    }
                    else
                    {
                        if (i == 0)
                        {
                            if (novi_zbirovi[i, j-1] == ulong.MaxValue)
                            {
                                novi_zbirovi[i, j] = ulong.MaxValue;
                            }
                            else
                            {
                                novi_zbirovi[i, j] = novi_zbirovi[i, j - 1] + navijaci[i, j];
                            }

                            
                        }
                        else
                        {
                            if (novi_zbirovi[i - 1, j] == ulong.MaxValue)
                            {
                                novi_zbirovi[i, j] = ulong.MaxValue;
                            }
                            else
                            {
                                novi_zbirovi[i, j] = novi_zbirovi[i - 1, j] + navijaci[i, j];
                            }
                            
                        }

                    }
                }
            }
            Console.WriteLine(novi_zbirovi[N-1, M-1]);
            for (int i = x; i < N; i++)
            {
                for (int j = y; j < M; j++)
                {
                    novi_zbirovi[i, j] = zbirovi[i, j];
                }
            }
        }
    }
}