using System;
class Program
{

public static int DinamNavis(int[,] matrica, int A, int B,int x,int y)
{
int[,] pomocni = new int[A + 1, B + 1];
//matrica[x - 1, y - 1] = int.MaxValue-1;
for (int i = 0; i < A + 1; i++)
{
pomocni[i, 0] = 0;
}
for (int j = 0; j < B + 1; j++)
{
pomocni[0, j] = 0;
}
for (int i = 1; i < A + 1; i++)
{
for (int j = 1; j < B + 1; j++)
{
//Console.WriteLine(matrica[i - 1, j - 1]);
//if(pomocni[i-1,j]<pomocni[i,j-1]){
// Console.WriteLine("DA I-- I:{0} | J:{1} | V:{2}", i, j,pomocni[i-1,j]);

// }else{Console.WriteLine("NE J-- I:{0} | J:{1} | V:{2}", i, j,pomocni[i,j-1]);
//  }
if (i == x && y == j)
{
i++;
if (i == A + 1)
{
i--;
}
else
{
j = 0;
}

continue;
}
else
{

//Console.WriteLine("I: {0}   J:{1}    Mat:{2}", i, j, matrica[i - 1, j - 1]);
int k = Math.Min(pomocni[i - 1, j], pomocni[i, j - 1]);
if (k == 0)
{
int t = Math.Max(pomocni[i - 1, j], pomocni[i, j - 1]);
pomocni[i, j] = t + matrica[i - 1, j - 1];
}
else
{
pomocni[i, j] = k + matrica[i - 1, j - 1];
}
}
//Console.WriteLine("Gornji: {0}   Levi:{1}    Pomocni:{2}", pomocni[i - 1, j], pomocni[i, j - 1], pomocni[i, j]);

;


}
}
return pomocni[A, B];
}
public static void Main(string[] args)
{
string[] prva = Console.ReadLine().Split(' ');
int A = int.Parse(prva[0]);
int B = int.Parse(prva[1]);
int[,] matrica = new int[A, B];
for (int i = 0; i < A; i++)
{
string[] unos = Console.ReadLine().Split(' ');
for (int j = 0; j < B; j++)
{

matrica[i, j] = int.Parse(unos[j]);
}
}

int q = int.Parse(Console.ReadLine());
int[] blokade = new int[q];
int[] blokade2 = new int[q];
long[] rez = new long[q];
for (int i = 0; i < q; i++)
{
string[] unos = Console.ReadLine().Split();
blokade[i] = int.Parse(unos[0]);
blokade2[i] = int.Parse(unos[1]);
rez[i] = (DinamNavis(matrica, A, B, blokade[i], blokade2[i]));
}
for(int i = 0;i<q;i++){
Console.WriteLine(rez[i]);
}
//string t = Console.ReadLine();
}
}