//

//  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 ;

}