#include using namespace std; template struct fenwick_tree { int n; vector node; fenwick_tree(int n) : n(n), node(n+1) {} void add(int i, T x = 1) { for (++i; i <= n ; i += i & -i) node[i] += x; } T sum(int i) { T res = 0; for (; i > 0; i -= i & -i) res += node[i]; return res; } T sum(int l, int r) { return sum(r) - sum(l); } void init() { fill(node.begin(), node.end(), 0); }; }; int main() { int n, q; cin >> n >> q; vector a(n); for (int i = 0; i < n; ++i) cin >> a[i]; const int maxn = *max_element(a.begin(), a.end()); vector pfxinv(n + 1), sfxinv(n + 1); fenwick_tree fw(maxn + 1); for (int i = 0; i < n; ++i) { pfxinv[i + 1] = pfxinv[i] + fw.sum(a[i] + 1, maxn + 1); fw.add(a[i]); } fw.init(); for (int i = n-1; i >= 0; --i) { sfxinv[i] = sfxinv[i + 1] + fw.sum(a[i]); fw.add(a[i]); } while (q--) { int l, r; cin >> l >> r; --l; int res = pfxinv[l] + sfxinv[r]; vector lsum(maxn + 1), rsum(maxn + 1); for (int i = 0; i < l; ++i) ++lsum[a[i]]; for (int i = r; i < n; ++i) ++rsum[a[i]]; for (int i = 0; i < maxn; ++i) { lsum[i + 1] += lsum[i]; rsum[i + 1] += rsum[i]; } int inv = INT_MAX; for (int i = 1; i <= maxn; ++i) { inv = min(inv, ((l - lsum[i]) + rsum[i - 1]) * (r - l)); } res += inv; for (int i = r; i < n; ++i) res += l - lsum[a[i]]; cout << res << '\n'; } }