#include <bits/stdc++.h>
using namespace std;
long long a[1000000], l[1000000], r[1000000], diff[1000000];
int main() {
  long long n, q, i, j, p, x, y, c, d;
  scanf("%lld %lld", &n, &q);
  for (i = 1; i <= n; i++) scanf("%lld", &a[i]);
  for (i = 1; i < n; i++) {
    a[i] = abs(a[i + 1] - a[i]);
  }
  stack<long long> s;
  for (i = 1; i <= n - 1; i++) {
    if (s.empty()) {
      s.push(i);
    } else {
      p = s.top();
      if (a[p] > a[i]) {
        s.push(i);
      } else {
        while (a[s.top()] <= a[i]) {
          p = s.top();
          s.pop();
          l[p] = i - 1;
          if (s.empty()) break;
        }
        s.push(i);
      }
    }
  }
  while (!s.empty()) {
    p = s.top();
    l[p] = n - 1;
    s.pop();
  }
  for (i = n - 1; i >= 0; i--) {
    if (s.empty()) {
      s.push(i);
    } else {
      p = s.top();
      if (a[p] > a[i]) {
        s.push(i);
      } else {
        while (a[s.top()] < a[i]) {
          p = s.top();
          s.pop();
          r[p] = i + 1;
          if (s.empty()) break;
        }
        s.push(i);
      }
    }
  }
  while (!s.empty()) {
    p = s.top();
    r[p] = 1;
    s.pop();
  }
  while (q--) {
    long long ans = 0;
    scanf("%lld %lld", &x, &y);
    for (i = x; i < y; i++) {
      c = i - max(x, r[i]);
      d = min(y - 1, l[i]) - i;
      ans += (c * d + c + d + 1) * a[i];
    }
    printf("%lld\n", ans);
  }
  return 0;
}
