#include <bits/stdc++.h>
using namespace std;
//
const int mx = 100000;
const int S = 30;
//
int n, q, A[mx], B[mx];
long long ans[mx];
tuple<int, int, int, int> query[mx];
vector<tuple<int, int, bool>> P[mx / S + 5];
//
namespace Fenwick_Tree
{
pair<int, long long> bit[mx + 5];
//
void update (int idx, int val, bool inc)
{
for (; idx <= n; idx += idx & -idx)
bit[idx].first += inc ? 1 : -1,
bit[idx].second += inc ? val : -val;
}
pair<int, long long> get (int l, int r)
{
pair<int, long long> res(0, 0);
//
if (l > r)
return res;
--l;
for (int idx = l; idx > 0; idx -= idx & -idx)
res.first -= bit[idx].first,
res.second -= bit[idx].second;
for (int idx = r; idx > 0; idx -= idx & -idx)
res.first += bit[idx].first,
res.second += bit[idx].second;
return res;
}
}
//
long long calc (int a, int b, int c, int d)
{
long long res = 0;
pair<int, long long> p1, p2;
//
if (a == b || c == d)
return 0;
for (int i = a; i < b; ++i)
Fenwick_Tree::update(B[i], A[i], 1);
for (int i = c; i < d; ++i)
{
p1 = Fenwick_Tree::get(1, B[i] - 1);
p2 = Fenwick_Tree::get(B[i] + 1, n);
res += (1LL * p1.first * A[i] - p1.second) + (p2.second - 1LL * p2.first * A[i]);
}
for (int i = a; i < b; ++i)
Fenwick_Tree::update(B[i], A[i], 0);
return res;
}
void prepare (void)
{
vector<int> V(A, A + n);
//
auto func = [&](int idx, bool inc, int x, int y) -> void
{
int u = x / S * S, v = y / S * S;
//
if (u == 0)
if (v == 0)
ans[idx] += inc ? calc(0, x, 0, y) : -calc(0, x, 0, y);
else
P[v / S].emplace_back(x, idx, inc),
ans[idx] += inc ? calc(0, x, v, y) : -calc(0, x, v, y);
else
if (v == 0)
P[u / S].emplace_back(y, idx, inc),
ans[idx] += inc ? calc(u, x, 0, y) : -calc(u, x, 0, y);
else
P[u / S].emplace_back(y, idx, inc),
P[v / S].emplace_back(x, idx, inc),
P[v / S].emplace_back(u, idx, inc ^ 1),
ans[idx] += inc ? calc(u, x, v, y) : -calc(u, x, v, y);
};
//
sort(V.begin(), V.end());
V.erase(unique(V.begin(), V.end()), V.end());
for (int i = 0; i < n; ++i)
B[i] = upper_bound(V.begin(), V.end(), A[i]) - V.begin();
for (int i = 0; i < n; ++i)
{
int a, b, c, d;
//
tie(a, b, c, d) = query[i];
func(i, 1, b, d);
if (a > 0)
func(i, 0, a, d);
if (c > 0)
func(i, 0, b, c);
if (a > 0 && c > 0)
func(i, 1, a, c);
}
}
void calculate (void)
{
vector<int32_t> cnt(n + 5);
vector<int64_t> sum(n + 5);
//
auto get = []<typename T>(vector<T> &V, int l, int r) -> long long
{
return V[r] - V[l - 1];
};
//
for (int k = 1; k <= n / S; ++k)
{
fill(cnt.begin(), cnt.end(), 0);
fill(sum.begin(), sum.end(), 0);
for (int i = 0; i < min(n, k * S); ++i)
cnt[B[i]]++,
sum[B[i]] += A[i];
for (int i = 1; i <= n; ++i)
cnt[i] += cnt[i - 1],
sum[i] += sum[i - 1];
//
int i = -1;
long long res = 0;
//
sort(P[k].begin(), P[k].end());
for (auto [d, idx, inc] : P[k])
{
while (i + 1 < d)
{
++i;
res += (get(cnt, 1, B[i] - 1) * A[i] - get(sum, 1, B[i] - 1))
+ (get(sum, B[i] + 1, n) - get(cnt, B[i] + 1, n) * A[i]);
}
ans[idx] += inc ? res : -res;
}
}
}
//
void process (void)
{
cin >> n >> q;
for (int i = 0; i < n; ++i)
cin >> A[i];
for (int i = 0; i < q; ++i)
{
int a, b, c, d;
//
cin >> a >> b >> c >> d;
query[i] = make_tuple(--a, b, --c, d);
}
prepare();
calculate();
for (int i = 0; i < q; ++i)
cout << ans[i] << '\n';
}
//
signed main (void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
process();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vCmNvbnN0IGludCBteCA9IDEwMDAwMDsKY29uc3QgaW50IFMgPSAzMDsKLy8KaW50IG4sIHEsIEFbbXhdLCBCW214XTsKbG9uZyBsb25nIGFuc1tteF07CnR1cGxlPGludCwgaW50LCBpbnQsIGludD4gcXVlcnlbbXhdOwp2ZWN0b3I8dHVwbGU8aW50LCBpbnQsIGJvb2w+PiBQW214IC8gUyArIDVdOwovLwpuYW1lc3BhY2UgRmVud2lja19UcmVlCnsKICAgIHBhaXI8aW50LCBsb25nIGxvbmc+IGJpdFtteCArIDVdOwogICAgLy8KICAgIHZvaWQgdXBkYXRlIChpbnQgaWR4LCBpbnQgdmFsLCBib29sIGluYykKICAgIHsKICAgICAgICBmb3IgKDsgaWR4IDw9IG47IGlkeCArPSBpZHggJiAtaWR4KQogICAgICAgICAgICBiaXRbaWR4XS5maXJzdCArPSBpbmMgPyAxIDogLTEsCiAgICAgICAgICAgIGJpdFtpZHhdLnNlY29uZCArPSBpbmMgPyB2YWwgOiAtdmFsOwogICAgfQogICAgcGFpcjxpbnQsIGxvbmcgbG9uZz4gZ2V0IChpbnQgbCwgaW50IHIpCiAgICB7CiAgICAgICAgcGFpcjxpbnQsIGxvbmcgbG9uZz4gcmVzKDAsIDApOwogICAgICAgIC8vCiAgICAgICAgaWYgKGwgPiByKQogICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgIC0tbDsKICAgICAgICBmb3IgKGludCBpZHggPSBsOyBpZHggPiAwOyBpZHggLT0gaWR4ICYgLWlkeCkKICAgICAgICAgICAgcmVzLmZpcnN0IC09IGJpdFtpZHhdLmZpcnN0LAogICAgICAgICAgICByZXMuc2Vjb25kIC09IGJpdFtpZHhdLnNlY29uZDsKICAgICAgICBmb3IgKGludCBpZHggPSByOyBpZHggPiAwOyBpZHggLT0gaWR4ICYgLWlkeCkKICAgICAgICAgICAgcmVzLmZpcnN0ICs9IGJpdFtpZHhdLmZpcnN0LAogICAgICAgICAgICByZXMuc2Vjb25kICs9IGJpdFtpZHhdLnNlY29uZDsKICAgICAgICByZXR1cm4gcmVzOwogICAgfQp9Ci8vCmxvbmcgbG9uZyBjYWxjIChpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCkKewogICAgbG9uZyBsb25nIHJlcyA9IDA7CiAgICBwYWlyPGludCwgbG9uZyBsb25nPiBwMSwgcDI7CiAgICAvLwogICAgaWYgKGEgPT0gYiB8fCBjID09IGQpCiAgICAgICAgcmV0dXJuIDA7CiAgICBmb3IgKGludCBpID0gYTsgaSA8IGI7ICsraSkKICAgICAgICBGZW53aWNrX1RyZWU6OnVwZGF0ZShCW2ldLCBBW2ldLCAxKTsKICAgIGZvciAoaW50IGkgPSBjOyBpIDwgZDsgKytpKQogICAgewogICAgICAgIHAxID0gRmVud2lja19UcmVlOjpnZXQoMSwgQltpXSAtIDEpOwogICAgICAgIHAyID0gRmVud2lja19UcmVlOjpnZXQoQltpXSArIDEsIG4pOwogICAgICAgIHJlcyArPSAoMUxMICogcDEuZmlyc3QgKiBBW2ldIC0gcDEuc2Vjb25kKSArIChwMi5zZWNvbmQgLSAxTEwgKiBwMi5maXJzdCAqIEFbaV0pOwogICAgfQogICAgZm9yIChpbnQgaSA9IGE7IGkgPCBiOyArK2kpCiAgICAgICAgRmVud2lja19UcmVlOjp1cGRhdGUoQltpXSwgQVtpXSwgMCk7CiAgICByZXR1cm4gcmVzOwp9CnZvaWQgcHJlcGFyZSAodm9pZCkKewogICAgdmVjdG9yPGludD4gVihBLCBBICsgbik7CiAgICAvLwogICAgYXV0byBmdW5jID0gWyZdKGludCBpZHgsIGJvb2wgaW5jLCBpbnQgeCwgaW50IHkpIC0+IHZvaWQKICAgIHsKICAgICAgICBpbnQgdSA9IHggLyBTICogUywgdiA9IHkgLyBTICogUzsKICAgICAgICAvLwogICAgICAgIGlmICh1ID09IDApCiAgICAgICAgICAgIGlmICh2ID09IDApCiAgICAgICAgICAgICAgICBhbnNbaWR4XSArPSBpbmMgPyBjYWxjKDAsIHgsIDAsIHkpIDogLWNhbGMoMCwgeCwgMCwgeSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIFBbdiAvIFNdLmVtcGxhY2VfYmFjayh4LCBpZHgsIGluYyksCiAgICAgICAgICAgICAgICBhbnNbaWR4XSArPSBpbmMgPyBjYWxjKDAsIHgsIHYsIHkpIDogLWNhbGMoMCwgeCwgdiwgeSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBpZiAodiA9PSAwKQogICAgICAgICAgICAgICAgUFt1IC8gU10uZW1wbGFjZV9iYWNrKHksIGlkeCwgaW5jKSwKICAgICAgICAgICAgICAgIGFuc1tpZHhdICs9IGluYyA/IGNhbGModSwgeCwgMCwgeSkgOiAtY2FsYyh1LCB4LCAwLCB5KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgUFt1IC8gU10uZW1wbGFjZV9iYWNrKHksIGlkeCwgaW5jKSwKICAgICAgICAgICAgICAgIFBbdiAvIFNdLmVtcGxhY2VfYmFjayh4LCBpZHgsIGluYyksCiAgICAgICAgICAgICAgICBQW3YgLyBTXS5lbXBsYWNlX2JhY2sodSwgaWR4LCBpbmMgXiAxKSwKICAgICAgICAgICAgICAgIGFuc1tpZHhdICs9IGluYyA/IGNhbGModSwgeCwgdiwgeSkgOiAtY2FsYyh1LCB4LCB2LCB5KTsKICAgIH07CiAgICAvLwogICAgc29ydChWLmJlZ2luKCksIFYuZW5kKCkpOwogICAgVi5lcmFzZSh1bmlxdWUoVi5iZWdpbigpLCBWLmVuZCgpKSwgVi5lbmQoKSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgICAgICBCW2ldID0gdXBwZXJfYm91bmQoVi5iZWdpbigpLCBWLmVuZCgpLCBBW2ldKSAtIFYuYmVnaW4oKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgIHsKICAgICAgICBpbnQgYSwgYiwgYywgZDsKICAgICAgICAvLwogICAgICAgIHRpZShhLCBiLCBjLCBkKSA9IHF1ZXJ5W2ldOwogICAgICAgIGZ1bmMoaSwgMSwgYiwgZCk7CiAgICAgICAgaWYgKGEgPiAwKQogICAgICAgICAgICBmdW5jKGksIDAsIGEsIGQpOwogICAgICAgIGlmIChjID4gMCkKICAgICAgICAgICAgZnVuYyhpLCAwLCBiLCBjKTsKICAgICAgICBpZiAoYSA+IDAgJiYgYyA+IDApCiAgICAgICAgICAgIGZ1bmMoaSwgMSwgYSwgYyk7CiAgICB9Cn0Kdm9pZCBjYWxjdWxhdGUgKHZvaWQpCnsKICAgIHZlY3RvcjxpbnQzMl90PiBjbnQobiArIDUpOwogICAgdmVjdG9yPGludDY0X3Q+IHN1bShuICsgNSk7CiAgICAvLwogICAgYXV0byBnZXQgPSBbXTx0eXBlbmFtZSBUPih2ZWN0b3I8VD4gJlYsIGludCBsLCBpbnQgcikgLT4gbG9uZyBsb25nCiAgICB7CiAgICAgICAgcmV0dXJuIFZbcl0gLSBWW2wgLSAxXTsKICAgIH07CiAgICAvLwogICAgZm9yIChpbnQgayA9IDE7IGsgPD0gbiAvIFM7ICsraykKICAgIHsKICAgICAgICBmaWxsKGNudC5iZWdpbigpLCBjbnQuZW5kKCksIDApOwogICAgICAgIGZpbGwoc3VtLmJlZ2luKCksIHN1bS5lbmQoKSwgMCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW4obiwgayAqIFMpOyArK2kpCiAgICAgICAgICAgIGNudFtCW2ldXSsrLAogICAgICAgICAgICBzdW1bQltpXV0gKz0gQVtpXTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpCiAgICAgICAgICAgIGNudFtpXSArPSBjbnRbaSAtIDFdLAogICAgICAgICAgICBzdW1baV0gKz0gc3VtW2kgLSAxXTsKICAgICAgICAvLwogICAgICAgIGludCBpID0gLTE7CiAgICAgICAgbG9uZyBsb25nIHJlcyA9IDA7CiAgICAgICAgLy8KICAgICAgICBzb3J0KFBba10uYmVnaW4oKSwgUFtrXS5lbmQoKSk7CiAgICAgICAgZm9yIChhdXRvIFtkLCBpZHgsIGluY10gOiBQW2tdKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKGkgKyAxIDwgZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgcmVzICs9IChnZXQoY250LCAxLCBCW2ldIC0gMSkgKiBBW2ldIC0gZ2V0KHN1bSwgMSwgQltpXSAtIDEpKQogICAgICAgICAgICAgICAgICAgICArIChnZXQoc3VtLCBCW2ldICsgMSwgbikgLSBnZXQoY250LCBCW2ldICsgMSwgbikgKiBBW2ldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbnNbaWR4XSArPSBpbmMgPyByZXMgOiAtcmVzOwogICAgICAgIH0KICAgIH0KfQovLwp2b2lkIHByb2Nlc3MgKHZvaWQpCnsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgICAgICBjaW4gPj4gQVtpXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgKytpKQogICAgewogICAgICAgIGludCBhLCBiLCBjLCBkOwogICAgICAgIC8vCiAgICAgICAgY2luID4+IGEgPj4gYiA+PiBjID4+IGQ7CiAgICAgICAgcXVlcnlbaV0gPSBtYWtlX3R1cGxlKC0tYSwgYiwgLS1jLCBkKTsKICAgIH0KCiAgICBwcmVwYXJlKCk7CiAgICBjYWxjdWxhdGUoKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkKICAgICAgICBjb3V0IDw8IGFuc1tpXSA8PCAnXG4nOwp9Ci8vCnNpZ25lZCBtYWluICh2b2lkKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0ciksIGNvdXQudGllKG51bGxwdHIpOwogICAgcHJvY2VzcygpOwp9