import java.util.Scanner;

public class terreno {
    static final int MAXID = 1000005;
    static int[] mark = new int[MAXID];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();

        int[][] V = new int[N + 1][M + 1];
        int[] rep_r = new int[MAXID];
        int[] rep_c = new int[MAXID];
        
        for (int i = 0; i < MAXID; i++) {
            rep_r[i] = -1;
            rep_c[i] = -1;
        }

        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                V[i][j] = sc.nextInt();
                int id = V[i][j];
                if (rep_r[id] == -1) {
                    rep_r[id] = i;
                    rep_c[id] = j;
                }
            }
        }

        int[][] pref = new int[N + 1][M + 1];
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= M; j++) {
                pref[i][j] = pref[i - 1][j] + pref[i][j - 1] - pref[i - 1][j - 1];
                int id = V[i][j];
                if (rep_r[id] == i && rep_c[id] == j) {
                    pref[i][j]++;
                }
            }
        }

        int Q = sc.nextInt();

        for (int q = 1; q <= Q; q++) {
            int l1 = sc.nextInt();
            int c1 = sc.nextInt();
            int l2 = sc.nextInt();
            int c2 = sc.nextInt();

            int ans = pref[l2][c2] - pref[l1 - 1][c2] - pref[l2][c1 - 1] + pref[l1 - 1][c1 - 1];

            for (int c = c1; c <= c2; c++) {
                int id1 = V[l1][c];
                if (mark[id1] != q) {
                    mark[id1] = q;
                    if (rep_r[id1] < l1 || rep_r[id1] > l2 || rep_c[id1] < c1 || rep_c[id1] > c2) ans++;
                }
                int id2 = V[l2][c];
                if (mark[id2] != q) {
                    mark[id2] = q;
                    if (rep_r[id2] < l1 || rep_r[id2] > l2 || rep_c[id2] < c1 || rep_c[id2] > c2) ans++;
                }
            }
            for (int r = l1; r <= l2; r++) {
                int id1 = V[r][c1];
                if (mark[id1] != q) {
                    mark[id1] = q;
                    if (rep_r[id1] < l1 || rep_r[id1] > l2 || rep_c[id1] < c1 || rep_c[id1] > c2) ans++;
                }
                int id2 = V[r][c2];
                if (mark[id2] != q) {
                    mark[id2] = q;
                    if (rep_r[id2] < l1 || rep_r[id2] > l2 || rep_c[id2] < c1 || rep_c[id2] > c2) ans++;
                }
            }

            System.out.println(ans);
        }
        sc.close();
    }
}
