#include <fstream>
#include <vector>
using namespace std;
ifstream fin("investitie.in");
ofstream fout("investitie.out");
int n, m, i, j, permlen, nperm, bcount, q, zi, zf, cl, cr, qc;
long long s;
vector <int> viz, addto, v, poz;
vector <vector <int>> ciclu, precalc;
void see (int start)
{
    viz[start] = nperm;
    poz[start] = ++bcount;
    ciclu[nperm].push_back(start);
    if (viz[v[start]] == 0) see(v[start]);
}
int cmmdc (int a, int b)
{
    int rest = a % b;
    while (rest != 0)
    {
        a = b;
        b = rest;
        rest = a % b;
    }
    return b;
}
int cmmmc (int a, int b)
{
    return a*b/cmmdc(a, b);
}
int mods (int a, int b)
{
    if (a%b == 0) return b;
    return a % b;
}
int main()
{
    fin >> n >> m; v.resize(n+1), viz.resize(n+1), poz.resize(n+1);
    for (i = 1; i <= n; ++i)
        fin >> v[i];
    ciclu.resize(1);
    for (i = 1; i <= n; i++)
    {
        if (!viz[i])
        {
            ++nperm;
            bcount = 0;
            ciclu.push_back(addto);
            see(i);
        }
    }
    permlen = 1;
    for (i = 1; i <= nperm; i++)
        permlen = cmmmc (permlen, ciclu[i].size());
    fin >> q;
    precalc.resize(2*permlen+1);
    precalc[0].resize(n+1);
    for (i = 0; i <= n; i++)
        precalc[0][i] = 0;
    for (i = 1; i <= 2*permlen; i++)
    {
        precalc[i].resize(n+1);
        precalc[i][0] = 0;
        for (j = 1; j <= n; j++)
        {
            precalc[i][j] = ciclu[viz[v[j]]][(poz[j]+i-1)%(int(ciclu[viz[v[j]]].size()))]+precalc[i-1][j]+precalc[i][j-1]-precalc[i-1][j-1];
        }
    }
//    for (i = 1; i <= permlen; i++, fout << "\n")
//        for (j = 1; j <= n; j++)
//            fout << precalc[i][j] << " ";
    for (qc = 1; qc <= q; qc++)
    {
        fin >> zi >> zf >> cl >> cr;
        s = 0;
        if (zi/permlen == zf/permlen)
            s = precalc[permlen+zf%permlen][cr]-precalc[permlen+zi%permlen-1][cr]-precalc[permlen+zf%permlen][cl-1]+precalc[permlen+zi%permlen-1][cl-1];
        else
        {
            s += precalc[2*permlen][cr]-precalc[permlen+zi%permlen-1][cr]-precalc[2*permlen][cl-1]+precalc[permlen+zi%permlen-1][cl-1];
            s += precalc[permlen+zf%permlen][cr]-precalc[permlen][cr]-precalc[permlen+zf%permlen][cl-1]+precalc[permlen][cl-1];
            s += (precalc[2*permlen][cr]-precalc[permlen][cr]-precalc[2*permlen][cl-1]+precalc[permlen][cl-1])*(zf/permlen-zi/permlen-(zf%permlen != 0));
        }
        fout << s << '\n';
    }
    return 0;
}
