//
// main.cpp
// DiDitest001
//
// Created by Rouen on 16/9/6.
// Copyright © 2016 年 Rouen. All rights reserved.
//
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
using namespace std ;
class comppair{
public :
int operator ()( pair < int , int > a, pair < int , int > b) {
if (a. second != b. second )
return a. second > b. second ;
else
return a. first > b. first ;
}
};
long long helper( int n, int m, multiset < int >& arr, vector < pair < int , int >> &cost) {
long long res = 0 ;
int resid = m;
sort (cost. begin (),cost. end (), comppair ());
for ( int k = 0 ;k <=m;++k) {
auto ii = arr. lower_bound (cost[ k ]. first );
if (ii != arr. end ()) {
res += cost[ k ]. second ;
arr. erase (ii);
--resid;
}
if (resid == 0 ) break ;
}
return res;
}
int main( int argc, const char * argv[]) {
// insert code here...
//std::cout << "Hello, World!\n";
int n,m;
multiset < int > arr;
vector < pair < int , int >> cost;
int tmp1, tmp2,tmp3;
while ( cin >> n >> m) {
arr. clear ();
cost. resize (m);
for ( int i = 0 ;i < n;++i) {
scanf ( "%d" ,&tmp3);
arr. insert (tmp3);
}
for ( int i = 0 ;i < m;++i) {
scanf ( "%d" ,&tmp1);
scanf ( "%d" ,&tmp2);
//scanf("%d %d",&tmp1,&tmp2);
cost[ i ] = {tmp1,tmp2};
}
printf ( "%lld\n" , helper (n, m, arr, cost));
}
return 0 ;