#include <bits/stdc++.h>
int sp_table[18][100001];
int naj[100001];
int array[100001];
void build(int n);
unsigned long long query(int l, int r);
int get_max(int l, int r);
int main() {
  int n, q;
  scanf("%d %d %d", &n, &q, &array[0]);
  for (int i = 1; i < n; i++) {
    scanf("%d", &array[i]);
    array[i - 1] = abs(array[i] - array[i - 1]);
  }
  build(n - 1);
  int l, r;
  while (q--) {
    scanf("%d %d", &l, &r);
    printf("%llu\n", query(l - 1, r - 1));
  }
  return 0;
}
void build(int n) {
  naj[2] = 1;
  for (int i = 3; i <= n; i++) {
    naj[i] = naj[i - 1];
    if ((1 << (naj[i] + 1)) <= i) naj[i]++;
  }
  for (int i = 0; i < n; i++) {
    sp_table[0][i] = i;
  }
  for (int i = 1; i <= naj[n]; i++) {
    int k = (1 << i);
    for (int j = 0; j + k - 1 < n; j++) {
      sp_table[i][j] =
          array[sp_table[i - 1][j]] > array[sp_table[i - 1][j + (1 << (i - 1))]]
              ? sp_table[i - 1][j]
              : sp_table[i - 1][j + (1 << (i - 1))];
    }
  }
}
unsigned long long query(int l, int r) {
  if (l >= r) return 0;
  unsigned long long ans = 0;
  int max_pair_pos = get_max(l, r - 1);
  ans += ((unsigned long long)(array[max_pair_pos])) * (max_pair_pos - l + 1) *
         (r - max_pair_pos);
  ans += query(l, max_pair_pos);
  ans += query(max_pair_pos + 1, r);
  return ans;
}
int get_max(int l, int r) {
  int k = naj[r - l + 1];
  return array[sp_table[k][l]] > array[sp_table[k][r - (1 << k) + 1]]
             ? sp_table[k][l]
             : sp_table[k][r - (1 << k) + 1];
}
