#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define pub push_back
#define pob pop_back
#define mpa make_pair
#define endl '\n'
#define BIT(i) ((1 << i))
const int maxn = 1e5 + 10;
int n, m, q, a[maxn];
int pos[maxn];
int vt[maxn];
bool check[maxn];
vector<int> luu[maxn];
vector<ll> pre[maxn];
int sz[maxn];
ll get(int i, int time)
{
int c = pos[i];
int p = vt[i];
ll sl = time / sz[c];
time %= sz[c];
ll ans = 1ll * pre[c][sz[c]] * sl;
if(p + time - 1 <= sz[c])
{
ans += pre[c][p + time - 1] - pre[c][p - 1];
}
else
{
ans += pre[c][sz[c]] - pre[c][p - 1];
ans += pre[c][p + time - 1 - sz[c]];
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#define code code
// freopen("code.INP","r",stdin);
// freopen("code.OUT","w",stdout);
cin >> n >> m;
for(int i=1; i<=n; i++) cin >> a[i];
int cnt = 0;
for(int i=1; i<=n; i++)
{
if(check[a[i]] == true) continue;
luu[cnt].pub(0);
int val = a[i];
while(check[val] == false)
{
luu[cnt].pub(val);
check[val] = true;
val = a[val];
}
cnt++;
}
for(int i=0; i<cnt; i++)
{
pre[i].pub(0);
sz[i] = luu[i].size() - 1;
for(int j=1; j<luu[i].size(); j++)
{
pre[i].pub(pre[i][j - 1] + luu[i][j]);
int x = luu[i][j];
vt[x] = j;
pos[x] = i;
}
}
cin >> q;
while(q--)
{
int x, y, l, r;
cin >> x >> y >> l >> r;
ll ans = 0;
for(int i=l; i<=r; i++)
{
ans += get(a[i], y) - get(a[i], x - 1);
}
cout << ans << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwdWIgcHVzaF9iYWNrCiNkZWZpbmUgcG9iIHBvcF9iYWNrCiNkZWZpbmUgbXBhIG1ha2VfcGFpcgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIEJJVChpKSAoKDEgPDwgaSkpCmNvbnN0IGludCBtYXhuID0gMWU1ICsgMTA7CmludCBuLCBtLCBxLCBhW21heG5dOwppbnQgcG9zW21heG5dOwppbnQgdnRbbWF4bl07CmJvb2wgY2hlY2tbbWF4bl07CnZlY3RvcjxpbnQ+IGx1dVttYXhuXTsKdmVjdG9yPGxsPiBwcmVbbWF4bl07CmludCBzelttYXhuXTsKbGwgZ2V0KGludCBpLCBpbnQgdGltZSkKewogICAgaW50IGMgPSBwb3NbaV07CiAgICBpbnQgcCA9IHZ0W2ldOwogICAgbGwgc2wgPSB0aW1lIC8gc3pbY107CiAgICB0aW1lICU9IHN6W2NdOwogICAgbGwgYW5zID0gMWxsICogcHJlW2NdW3N6W2NdXSAqIHNsOwogICAgaWYocCArIHRpbWUgLSAxIDw9IHN6W2NdKQogICAgewogICAgICAgIGFucyArPSBwcmVbY11bcCArIHRpbWUgLSAxXSAtIHByZVtjXVtwIC0gMV07CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgYW5zICs9IHByZVtjXVtzeltjXV0gLSBwcmVbY11bcCAtIDFdOwogICAgICAgIGFucyArPSBwcmVbY11bcCArIHRpbWUgLSAxIC0gc3pbY11dOwogICAgfQogICAgcmV0dXJuIGFuczsKfQppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgI2RlZmluZSBjb2RlIGNvZGUKLy8gICAgZnJlb3BlbigiY29kZS5JTlAiLCJyIixzdGRpbik7Ci8vICAgIGZyZW9wZW4oImNvZGUuT1VUIiwidyIsc3Rkb3V0KTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKSBjaW4gPj4gYVtpXTsKICAgIGludCBjbnQgPSAwOwogICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBpZihjaGVja1thW2ldXSA9PSB0cnVlKSBjb250aW51ZTsKICAgICAgICBsdXVbY250XS5wdWIoMCk7CiAgICAgICAgaW50IHZhbCA9IGFbaV07CiAgICAgICAgd2hpbGUoY2hlY2tbdmFsXSA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgIGx1dVtjbnRdLnB1Yih2YWwpOwogICAgICAgICAgICBjaGVja1t2YWxdID0gdHJ1ZTsKICAgICAgICAgICAgdmFsID0gYVt2YWxdOwogICAgICAgIH0KICAgICAgICBjbnQrKzsKICAgIH0KICAgIGZvcihpbnQgaT0wOyBpPGNudDsgaSsrKQogICAgewogICAgICAgIHByZVtpXS5wdWIoMCk7CiAgICAgICAgc3pbaV0gPSBsdXVbaV0uc2l6ZSgpIC0gMTsKICAgICAgICBmb3IoaW50IGo9MTsgajxsdXVbaV0uc2l6ZSgpOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBwcmVbaV0ucHViKHByZVtpXVtqIC0gMV0gKyBsdXVbaV1bal0pOwogICAgICAgICAgICBpbnQgeCA9IGx1dVtpXVtqXTsKICAgICAgICAgICAgdnRbeF0gPSBqOwogICAgICAgICAgICBwb3NbeF0gPSBpOwogICAgICAgIH0KICAgIH0KICAgIGNpbiA+PiBxOwogICAgd2hpbGUocS0tKQogICAgewogICAgICAgIGludCB4LCB5LCBsLCByOwogICAgICAgIGNpbiA+PiB4ID4+IHkgPj4gbCA+PiByOwogICAgICAgIGxsIGFucyA9IDA7CiAgICAgICAgZm9yKGludCBpPWw7IGk8PXI7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGFucyArPSBnZXQoYVtpXSwgeSkgLSBnZXQoYVtpXSwgeCAtIDEpOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0=