#include <bits/stdc++.h>
#define name "test"
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define ll long long
#define int ll
using namespace std;
const int N = 1e5 + 5;
int a[N], n, m;
int vis[N], cyc[N], pos_cyc[N];
vector<vector<int>> cycles;
vector<vector<ll>> pre;
vector<ll> sum;
void nhap() {
cin >> n >> m;
FOR(i, 1, n) cin >> a[i];
}
int calc(int zi, int zf, int cl, int cr) {
int ans = 0;
int L = zf - zi + 1;
FOR(i, cl, cr) {
int id = cyc[i];
int pos = pos_cyc[i];
int k = cycles[id].size();
ans += (L / k) * sum[id];
int rem = L % k;
int st = 1 + (pos + (zi - 1) % k) % k;
if (rem) {
if (st + rem <= k) ans += pre[id][st + rem] - pre[id][st];
else ans += (pre[id][k] - pre[id][st]) + pre[id][(st + rem) % k];
}
}
return ans;
}
void giai() {
int q; cin >> q;
while(q--) {
int zi, zf, cl, cr;
cin >> zi >> zf >> cl >> cr;
cout << calc(zi, zf, cl, cr) << '\n';
}
}
void init() {
int idx = 0;
FOR(i, 1, n) if (!vis[i]) {
vector<int> tmp;
int x = i;
while (!vis[x]) {
vis[x] = 1;
tmp.push_back(x);
x = a[x];
}
cycles.push_back(tmp);
int k = tmp.size();
FOR(j, 0, k-1) {
cyc[tmp[j]] = idx;
pos_cyc[tmp[j]] = j;
}
pre.push_back(vector<int>(k+1, 0));
FOR(j, 0, k-1) pre[idx][j+1] = pre[idx][j] + tmp[j];
sum.push_back(pre[idx][k]);
idx++;
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
nhap();
init();
giai();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIG5hbWUgInRlc3QiCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSBhOyBpIDw9IGI7IGkrKykKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBpbnQgbGwKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDFlNSArIDU7CmludCBhW05dLCBuLCBtOwppbnQgdmlzW05dLCBjeWNbTl0sIHBvc19jeWNbTl07CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gY3ljbGVzOwp2ZWN0b3I8dmVjdG9yPGxsPj4gcHJlOwp2ZWN0b3I8bGw+IHN1bTsKCnZvaWQgbmhhcCgpIHsKICAgIGNpbiA+PiBuID4+IG07CiAgICBGT1IoaSwgMSwgbikgY2luID4+IGFbaV07Cn0KCmludCBjYWxjKGludCB6aSwgaW50IHpmLCBpbnQgY2wsIGludCBjcikgewogICAgaW50IGFucyA9IDA7CiAgICBpbnQgTCA9IHpmIC0gemkgKyAxOwogICAgRk9SKGksIGNsLCBjcikgewogICAgICAgIGludCBpZCA9IGN5Y1tpXTsKICAgICAgICBpbnQgcG9zID0gcG9zX2N5Y1tpXTsKICAgICAgICBpbnQgayA9IGN5Y2xlc1tpZF0uc2l6ZSgpOwogICAgICAgIGFucyArPSAoTCAvIGspICogc3VtW2lkXTsKICAgICAgICBpbnQgcmVtID0gTCAlIGs7CiAgICAgICAgaW50IHN0ID0gMSArIChwb3MgKyAoemkgLSAxKSAlIGspICUgazsKICAgICAgICBpZiAocmVtKSB7CiAgICAgICAgICAgIGlmIChzdCArIHJlbSA8PSBrKSBhbnMgKz0gcHJlW2lkXVtzdCArIHJlbV0gLSBwcmVbaWRdW3N0XTsKICAgICAgICAgICAgZWxzZSBhbnMgKz0gKHByZVtpZF1ba10gLSBwcmVbaWRdW3N0XSkgKyBwcmVbaWRdWyhzdCArIHJlbSkgJSBrXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYW5zOwp9Cgp2b2lkIGdpYWkoKSB7CiAgICBpbnQgcTsgY2luID4+IHE7CiAgICB3aGlsZShxLS0pIHsKICAgICAgICBpbnQgemksIHpmLCBjbCwgY3I7CiAgICAgICAgY2luID4+IHppID4+IHpmID4+IGNsID4+IGNyOwogICAgICAgIGNvdXQgPDwgY2FsYyh6aSwgemYsIGNsLCBjcikgPDwgJ1xuJzsKICAgIH0KfQoKdm9pZCBpbml0KCkgewogICAgaW50IGlkeCA9IDA7CiAgICBGT1IoaSwgMSwgbikgaWYgKCF2aXNbaV0pIHsKICAgICAgICB2ZWN0b3I8aW50PiB0bXA7CiAgICAgICAgaW50IHggPSBpOwogICAgICAgIHdoaWxlICghdmlzW3hdKSB7CiAgICAgICAgICAgIHZpc1t4XSA9IDE7CiAgICAgICAgICAgIHRtcC5wdXNoX2JhY2soeCk7CiAgICAgICAgICAgIHggPSBhW3hdOwogICAgICAgIH0KICAgICAgICBjeWNsZXMucHVzaF9iYWNrKHRtcCk7CiAgICAgICAgaW50IGsgPSB0bXAuc2l6ZSgpOwogICAgICAgIEZPUihqLCAwLCBrLTEpIHsKICAgICAgICAgICAgY3ljW3RtcFtqXV0gPSBpZHg7CiAgICAgICAgICAgIHBvc19jeWNbdG1wW2pdXSA9IGo7CiAgICAgICAgfQogICAgICAgIHByZS5wdXNoX2JhY2sodmVjdG9yPGludD4oaysxLCAwKSk7CiAgICAgICAgRk9SKGosIDAsIGstMSkgcHJlW2lkeF1baisxXSA9IHByZVtpZHhdW2pdICsgdG1wW2pdOwogICAgICAgIHN1bS5wdXNoX2JhY2socHJlW2lkeF1ba10pOwogICAgICAgIGlkeCsrOwogICAgfQp9CgpzaWduZWQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgbmhhcCgpOwogICAgaW5pdCgpOwogICAgZ2lhaSgpOwoKICAgIHJldHVybiAwOwp9Cg==