#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
pair<int, int> p[N];
struct Q {
  long long w;
  int id;
  inline bool operator<(const Q &b) const { return w > b.w; }
};
int main() {
  int n = gi(), m = gi(), i, k, s = -n;
  long long ans = 0, w;
  const long long inf = 1e15;
  for (i = 1; i <= n; i++) p[i] = make_pair(gi(), -1);
  while (m--) p[++n].first = gi(), s += p[n].second = gi();
  if (s < 0) return puts("-1"), 0;
  sort(p + 1, p + 1 + n);
  priority_queue<long long, vector<long long>, greater<long long> > q0;
  priority_queue<Q> q1;
  for (i = 1; i <= n; i++)
    if (p[i].second == -1) {
      w = inf;
      if (!q1.empty()) {
        k = q1.top().id;
        w = p[i].first + q1.top().w;
        q1.pop();
        if (p[k].second) p[k].second--, q1.push((Q){-p[k].first, k});
      }
      ans += w;
      q0.push(-p[i].first - w);
    } else {
      while (p[i].second && !q0.empty() && p[i].first + q0.top() < 0) {
        p[i].second--;
        w = p[i].first + q0.top();
        q0.pop();
        ans += w;
        q1.push((Q){-p[i].first - w, 0});
      }
      if (p[i].second) q1.push((Q){-p[i].first, i}), p[i].second--;
    }
  cout << ans << endl;
  return 0;
}
