#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
struct Query
{
int mobius, id, l, r;
Query(int mobius = 0, int id = 0, int l = 0, int r = 0) :
mobius(mobius), id(id), l(l), r(r) {};
};
struct Segment_Tree
{
vector<ll> tree, lazy;
Segment_Tree(int n = 0)
{
tree.assign(4 * n + 10, 0);
lazy.assign(4 * n + 10, 0);
}
void push(int id, int l, int r)
{
if (lazy[id] == 0)
return ;
int m = l + r >> 1;
tree[id << 1] += (m - l + 1) * lazy[id];
tree[id << 1 | 1] += (r - m) * lazy[id];
lazy[id << 1] += lazy[id];
lazy[id << 1 | 1] += lazy[id];
lazy[id] = 0;
}
void update(int id, int l, int r, int u, int v, int val)
{
if (r < u || l > v)
return ;
if (u <= l && r <= v)
{
tree[id] += val * (r - l + 1);
lazy[id] += val;
return ;
}
int m = l + r >> 1;
push(id, l, r);
update(id << 1, l, m, u, v, val);
update(id << 1 | 1, m + 1, r, u, v, val);
tree[id] = tree[id << 1] + tree[id << 1 | 1];
}
ll get(int id, int l, int r, int u, int v)
{
if (r < u || l > v)
return 0;
if (u <= l && r <= v)
return tree[id];
int m = l + r >> 1;
push(id, l, r);
return get(id << 1, l, m, u, v) + get(id << 1 | 1, m + 1, r, u, v);
}
};
const int maxn = 1e6;
const int INF = 1e9;
int n, q, l[maxn + 10], r[maxn + 10], pre[maxn + 10], a[maxn + 10], ql[maxn + 10], qr[maxn + 10];
vector<int> st;
vector<Query> qrs[maxn + 10];
ll ans[maxn + 10];
Segment_Tree smt;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("BAI2.INP", "r"))
{
freopen("BAI2.INP", "r", stdin);
freopen("BAI2.OUT", "w", stdout);
}
cin >> n >> q;
smt= Segment_Tree(n);
for (int i = 1; i <= n; i++)
cin >> a[i];
st.push_back(0);
a[0] = INF;
for (int i = 1; i <= n; i++)
{
while (a[st.back()] < a[i])
st.pop_back();
l[i] = st.back() + 1;
st.push_back(i);
}
st.clear();
a[n + 1] = INF;
st.push_back(n + 1);
for (int i = n; i >= 1; i--)
{
while (a[st.back()] < a[i])
st.pop_back();
r[i] = st.back() - 1;
st.push_back(i);
}
for (int i = 1; i <= q; i++)
cin >> ql[i];
for (int i = 1; i <= q; i++)
cin >> qr[i];
for (int i = 1; i <= q; i++)
{
qrs[ql[i] - 1].push_back(Query(-1, i, ql[i], qr[i]));
qrs[qr[i]].push_back(Query(1, i, ql[i], qr[i]));
}
for (int i = 1; i <= n; i++)
{
smt.update(1, 1, n, l[i], r[i], 1);
for (Query x : qrs[i])
ans[x.id] += x.mobius * smt.get(1, 1, n, x.l, x.r);
}
for (int i = 1; i <= q; i++)
cout << ans[i] << ' ';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBRdWVyeQp7CiAgICBpbnQgbW9iaXVzLCBpZCwgbCwgcjsKCiAgICBRdWVyeShpbnQgbW9iaXVzID0gMCwgaW50IGlkID0gMCwgaW50IGwgPSAwLCBpbnQgciA9IDApIDoKICAgICAgICBtb2JpdXMobW9iaXVzKSwgaWQoaWQpLCBsKGwpLCByKHIpIHt9Owp9OwpzdHJ1Y3QgU2VnbWVudF9UcmVlCnsKICAgIHZlY3RvcjxsbD4gdHJlZSwgbGF6eTsKCiAgICBTZWdtZW50X1RyZWUoaW50IG4gPSAwKQogICAgewogICAgICAgIHRyZWUuYXNzaWduKDQgKiBuICsgMTAsIDApOwogICAgICAgIGxhenkuYXNzaWduKDQgKiBuICsgMTAsIDApOwogICAgfQogICAgdm9pZCBwdXNoKGludCBpZCwgaW50IGwsIGludCByKQogICAgewogICAgICAgIGlmIChsYXp5W2lkXSA9PSAwKQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICB0cmVlW2lkIDw8IDFdICs9IChtIC0gbCArIDEpICogbGF6eVtpZF07CiAgICAgICAgdHJlZVtpZCA8PCAxIHwgMV0gKz0gKHIgLSBtKSAqIGxhenlbaWRdOwogICAgICAgIGxhenlbaWQgPDwgMV0gKz0gbGF6eVtpZF07CiAgICAgICAgbGF6eVtpZCA8PCAxIHwgMV0gKz0gbGF6eVtpZF07CiAgICAgICAgbGF6eVtpZF0gPSAwOwogICAgfQogICAgdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdiwgaW50IHZhbCkKICAgIHsKICAgICAgICBpZiAociA8IHUgfHwgbCA+IHYpCiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpCiAgICAgICAgewogICAgICAgICAgICB0cmVlW2lkXSArPSB2YWwgKiAociAtIGwgKyAxKTsKICAgICAgICAgICAgbGF6eVtpZF0gKz0gdmFsOwogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIH0KICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgcHVzaChpZCwgbCwgcik7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEsIGwsIG0sIHUsIHYsIHZhbCk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtICsgMSwgciwgdSwgdiwgdmFsKTsKICAgICAgICB0cmVlW2lkXSA9IHRyZWVbaWQgPDwgMV0gKyB0cmVlW2lkIDw8IDEgfCAxXTsKICAgIH0KICAgIGxsIGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KQogICAgewogICAgICAgIGlmIChyIDwgdSB8fCBsID4gdikKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpCiAgICAgICAgICAgIHJldHVybiB0cmVlW2lkXTsKICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgcHVzaChpZCwgbCwgcik7CiAgICAgICAgcmV0dXJuIGdldChpZCA8PCAxLCBsLCBtLCB1LCB2KSArIGdldChpZCA8PCAxIHwgMSwgbSArIDEsIHIsIHUsIHYpOwogICAgfQp9OwoKY29uc3QgaW50IG1heG4gPSAxZTY7CmNvbnN0IGludCBJTkYgPSAxZTk7CgppbnQgbiwgcSwgbFttYXhuICsgMTBdLCByW21heG4gKyAxMF0sIHByZVttYXhuICsgMTBdLCBhW21heG4gKyAxMF0sIHFsW21heG4gKyAxMF0sIHFyW21heG4gKyAxMF07CnZlY3RvcjxpbnQ+IHN0Owp2ZWN0b3I8UXVlcnk+IHFyc1ttYXhuICsgMTBdOwpsbCBhbnNbbWF4biArIDEwXTsKU2VnbWVudF9UcmVlIHNtdDsKCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oIkJBSTIuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJCQUkyLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIkJBSTIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGNpbiA+PiBuID4+IHE7CiAgICBzbXQ9IFNlZ21lbnRfVHJlZShuKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIHN0LnB1c2hfYmFjaygwKTsKICAgIGFbMF0gPSBJTkY7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgd2hpbGUgKGFbc3QuYmFjaygpXSA8IGFbaV0pCiAgICAgICAgICAgIHN0LnBvcF9iYWNrKCk7CiAgICAgICAgbFtpXSA9IHN0LmJhY2soKSArIDE7CiAgICAgICAgc3QucHVzaF9iYWNrKGkpOwogICAgfQogICAgc3QuY2xlYXIoKTsKICAgIGFbbiArIDFdID0gSU5GOwogICAgc3QucHVzaF9iYWNrKG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IGktLSkKICAgIHsKICAgICAgICB3aGlsZSAoYVtzdC5iYWNrKCldIDwgYVtpXSkKICAgICAgICAgICAgc3QucG9wX2JhY2soKTsKICAgICAgICByW2ldID0gc3QuYmFjaygpIC0gMTsKICAgICAgICBzdC5wdXNoX2JhY2soaSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspCiAgICAgICAgY2luID4+IHFsW2ldOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQogICAgICAgIGNpbiA+PiBxcltpXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKICAgIHsKICAgICAgICBxcnNbcWxbaV0gLSAxXS5wdXNoX2JhY2soUXVlcnkoLTEsIGksIHFsW2ldLCBxcltpXSkpOwogICAgICAgIHFyc1txcltpXV0ucHVzaF9iYWNrKFF1ZXJ5KDEsIGksIHFsW2ldLCBxcltpXSkpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIHNtdC51cGRhdGUoMSwgMSwgbiwgbFtpXSwgcltpXSwgMSk7CiAgICAgICAgZm9yIChRdWVyeSB4IDogcXJzW2ldKQogICAgICAgICAgICBhbnNbeC5pZF0gKz0geC5tb2JpdXMgKiBzbXQuZ2V0KDEsIDEsIG4sIHgubCwgeC5yKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKICAgICAgICBjb3V0IDw8IGFuc1tpXSA8PCAnICc7Cn0K