#include <bits/stdc++.h>
using namespace std;
const long long oo = 1e18;
void solve() {
  int n, m;
  cin >> n >> m;
  long long x[n + 1];
  for (int i = 1; i <= n; i++) cin >> x[i];
  pair<long long, int> holes[m + 1];
  for (int j = 1; j <= m; j++) cin >> holes[j].first >> holes[j].second;
  sort(x + 1, x + 1 + n);
  sort(holes + 1, holes + 1 + m);
  long long dp[2][n + 1];
  long long pref[n + 1];
  for (int j = 0; j <= n; j++) dp[0][j] = (j == 0) ? 0 : oo;
  for (int i = 1; i <= m; i++) {
    int ii = i % 2, ij = 1 - ii;
    pref[0] = 0;
    for (int j = 1; j <= n; j++)
      pref[j] = pref[j - 1] + abs(x[j] - holes[i].first);
    deque<pair<long long, int>> range;
    range.push_back(make_pair(dp[ij][0] - pref[0], 0));
    for (int j = 0; j <= n; j++) {
      auto elem = make_pair(dp[ij][j] - pref[j], j);
      for (; range.size() > 0 and range.front().second + holes[i].second < j;)
        range.pop_front();
      for (; range.size() > 0 and range.back().first > elem.first;)
        range.pop_back();
      range.push_back(elem);
      dp[ii][j] = pref[j] + range.front().first;
    }
  }
  long long answer = dp[m % 2][n];
  cout << (answer == oo ? -1 : answer);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  solve();
}
