#include <bits/stdc++.h>
using namespace std;
long long _pow(long long a, long long b) {
  long long ans = 1;
  for (long long i = 0; b >> i; i++) {
    if ((b >> i) & 1) ans *= a;
    a *= a;
  }
  return ans;
}
struct Seg {
  int a, b;
};
int n, q;
int inp[305];
int tmp[305];
Seg query[305];
int find_min(void) {
  int minV = 1e9;
  for (int i = 0; i < n; i++) {
    minV = min(minV, inp[i]);
  }
  return minV;
}
int absii(int a) { return a < 0 ? -a : a; }
int main(void) {
  scanf("%d %d", &n, &q);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &inp[i]);
  }
  for (int i = 0; i < q; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    query[i] = {a, b};
  }
  int ans = -1;
  vector<int> qs;
  for (int i = 1; i <= n; i++) {
    vector<int> qtmp;
    memcpy(tmp, inp, sizeof(inp));
    int maxV = tmp[i];
    int maxI = i;
    for (int j = 0; j < q; j++) {
      if (maxI < query[j].a || query[j].b < maxI) {
        qtmp.push_back(j + 1);
        for (int k = query[j].a; k <= query[j].b; k++) {
          tmp[k]--;
        }
      }
    }
    int minV = 1e9;
    for (int i = 1; i <= n; i++) {
      minV = min(minV, tmp[i]);
    }
    if (ans < maxV - minV) {
      ans = maxV - minV;
      qs = qtmp;
    }
  }
  printf("%d\n", ans);
  printf("%d\n", qs.size());
  for (int i = 0; i < qs.size(); i++) {
    printf("%d ", qs[i]);
  }
  return 0;
}
