func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1001000;   int n;   void add(long long* a, int x, long long y) {     for (; x <= n; x += x & -x) a[x] += y;   }   long long gsm(long long* a, int x) {     long long ret = 0;     for (; x; x &= x - 1) ret += a[x];     return ret;   }   long long sum0[N], sum1[N];   void mdf(int x, int y) {     add(sum0, x, y);     add(sum1, x, (long long)(1 - x) * y);   }   void modify(int l, int r, int x) {     mdf(l, x);     if (r < n) mdf(r + 1, -x);   }   long long query(int x) { return gsm(sum0, x) * x + gsm(sum1, x); }   vector<int> vec[N];   int q[N], l[N], r[N], a[N], m;   long long ans[N];   void solve() {     for (int i = 1; i <= m; ++i) vec[l[i]].push_back(i);     q[0] = n + 1;     for (int i = n, j = 0; i; --i) {       for (; j && a[q[j]] < a[i]; --j)         ;       modify(i, q[j] - 1, 1);       q[++j] = i;       for (int t : vec[i]) ans[t] += query(r[t]);     }     for (int i = 1; i <= n; ++i) vec[i].clear(), sum0[i] = sum1[i] = 0;   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cin >> n >> m;     for (int i = 1; i <= n; ++i) cin >> a[i];     for (int i = 1; i <= m; ++i) cin >> l[i];     for (int i = 1; i <= m; ++i) cin >> r[i];     solve();     for (int i = 1; i <= m; ++i)       l[i] = n + 1 - l[i], r[i] = n + 1 - r[i], swap(l[i], r[i]);     reverse(a + 1, a + n + 1);     solve();     for (int i = 1; i <= m; ++i)       ans[i] -= r[i] - l[i] + 1, cout << ans[i] <<    n [i == m];     return 0;   }   