#include #define rep(i, n) for (int i = 0; i < (n); i++) #define repr(i, n) for (int i = (n) - 1; i >= 0; i--) #define range(a) a.begin(), a.end() using namespace std; using ll = long long; template struct BIT { vector dat; BIT(int n) : dat(n + 1) {} void update(int k, T v) { for (int i = k + 1; i < dat.size(); i += i & -i) { dat[i] += v; } } T query(int k) { T res = 0; for (int i = k; i > 0; i -= i & -i) { res += dat[i]; } return res; } }; int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int N, Q; cin >> N >> Q; vector A(N); vector pred(N, -1); vector stk; vector> events(N + 1); rep(i, N) { cin >> A[i]; while (!stk.empty() && A[stk.back()] <= A[i]) { stk.pop_back(); } if (!stk.empty()) pred[i] = stk.back(); events[pred[i] + 1].push_back(i); stk.push_back(i); } vector L(Q), R(Q); vector> queries(N); rep(i, Q) { int tmp; cin >> tmp; cin >> L[i] >> R[i]; L[i]--; queries[L[i]].push_back(i); } vector ans(Q); BIT bit(N); rep(i, N) { for (int j : events[i]) bit.update(j, 1); for (int j : queries[i]) { ans[j] = bit.query(R[j]) - bit.query(L[j]); } } rep(i, Q) cout << ans[i] << '\n'; }