#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e5 + 10;
const long long MAXL = 20;
long long n, m;
long long v[MAXN], s[MAXN];
long long rmq[MAXL][MAXN];
long long resp[MAXN];
long long best[MAXN];
void buildRMQ() {
  for (long long k = 0; k < n; k++) rmq[0][k] = s[k];
  for (long long i = 1; i < MAXL; i++)
    for (long long k = 0; k < MAXN; k++)
      if (k + (1 << i) <= n)
        rmq[i][k] = max(rmq[i - 1][k], rmq[i - 1][k + (1 << i - 1)]);
}
long long RMQ(long long a, long long b) {
  long long size = b - a + 1;
  long long log = 31 - __builtin_clz(size);
  return max(rmq[log][a], rmq[log][b - (1 << log) + 1]);
}
long long bs(long long ini, long long fim, long long pos) {
  while (ini < fim) {
    long long mid = (ini + fim + 1) / 2;
    if (RMQ(mid, pos - 1) >= s[pos])
      ini = mid;
    else
      fim = mid - 1;
  }
  return ini;
}
int main() {
  scanf("%lld %lld", &n, &m);
  for (long long i = 0; i < n; i++) scanf("%lld", &v[i]);
  s[0] = 0;
  for (long long i = 1; i < n; i++) s[i] = abs(v[i] - v[i - 1]);
  buildRMQ();
  while (m--) {
    long long p, q;
    scanf("%lld %lld", &p, &q);
    p--;
    q--;
    long long ans = 0;
    stack<pair<long long, long long> > st;
    for (long long i = p; i <= q; i++) {
      while (st.size() && st.top().first <= s[i]) st.pop();
      if (st.size())
        best[i] = st.top().second;
      else
        best[i] = 0;
      st.push(pair<long long, long long>(s[i], i));
    }
    for (long long i = p; i <= q; i++) {
      resp[i] = 0;
      long long bt = best[i];
      if (s[bt] >= s[i]) {
        resp[i] = s[i] * (i - bt) + resp[bt];
      } else {
        resp[i] = s[i] * (i - p);
      }
      ans += resp[i];
    }
    printf("%lld\n", ans);
  }
}
