#include <bits/stdc++.h>
using namespace std;
struct data {
  long long w;
  int id;
  inline int operator<(const data &a) const { return w > a.w; }
};
priority_queue<long long, vector<long long>, greater<long long> > Q0;
priority_queue<data> Q1;
pair<int, int> p[(2000005)];
long long w, sum, ans;
int n, m;
inline int gi() {
  register int first = 0, q = 1;
  register char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') q = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') first = first * 10 + ch - 48, ch = getchar();
  return q * first;
}
int main() {
  n = gi(), m = gi(), sum = -n;
  for (register int i = 1; i <= n; ++i) p[i] = make_pair(gi(), -1);
  while (m--) p[++n].first = gi(), sum += p[n].second = gi();
  if (sum < 0) return puts("-1"), 0;
  sort(p + 1, p + n + 1);
  for (register int i = 1, k; i <= n; ++i)
    if (p[i].second == -1) {
      w = 1e15;
      if (!Q1.empty()) {
        w = p[i].first + Q1.top().w, k = Q1.top().id, Q1.pop();
        if (p[k].second) --p[k].second, Q1.push((data){-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) {
        w = p[i].first + Q0.top(), ans += w, Q0.pop();
        --p[i].second, Q1.push((data){-p[i].first - w, 0});
      }
      if (p[i].second) --p[i].second, Q1.push((data){-p[i].first, i});
    }
  cout << ans;
  return 0;
}
