using System;
using System.Collections.Generic;
using System.Linq;

namespace D
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] In = Console.ReadLine().Split(' ');
            int n = int.Parse(In[0]);
            int m = int.Parse(In[1]);
            string[] In2 = Console.ReadLine().Split(' ');
            var D = new Dictionary<int, int>();
            for (int i = 0; i < n; i++)
            {
                int x = int.Parse(In2[i]);
                if (D.ContainsKey(x)) D[x]++;
                else D.Add(x,1);
            }
            for (int i = 0; i < m; i++)
            {
                string[] In3 = Console.ReadLine().Split(' ');
                int b = int.Parse(In3[0]);
                int c = int.Parse(In3[1]);
                if (D.ContainsKey(c)) D[c]+=b;
                else D.Add(c, b);
            }
            long ans = 0;
            var SD = D.OrderByDescending(x => x.Key);
            foreach(var sd in SD)
            {
                if (n < sd.Value)
                {
                    ans += (long)sd.Key * n;
                    break;
                }
                else
                {
                    ans += ((long)sd.Key * sd.Value);
                    n -= sd.Value;
                    continue;
                }
            }
            Console.WriteLine(ans);
        }
    }
    //TLE
    //class Program
    //{
    //    static void Main(string[] args)
    //    {
    //        string[] In = Console.ReadLine().Split(' ');
    //        int n = int.Parse(In[0]);
    //        int m = int.Parse(In[1]);
    //        string[] In2 = Console.ReadLine().Split(' ');
    //        var H = new MinHeap(2 * n);
    //        long ans = 0;
    //        for (int i = 0; i < n; i++)
    //        {
    //            int x = int.Parse(In2[i]);
    //            H.Add(x);
    //            ans += x;
    //        }
    //        for (int i = 0; i < m; i++)
    //        {
    //            string[] In3 = Console.ReadLine().Split(' ');
    //            int b = int.Parse(In3[0]);
    //            int c = int.Parse(In3[1]);
    //            if (c > H.Peek())
    //            {
    //                for (int j = 0; j < b; j++)
    //                {
    //                    H.Add(c);
    //                    ans += c;
    //                    int p=H.Pop();
    //                    ans -= p;
    //                }
    //            }
    //        }
    //        Console.WriteLine(ans);
    //    }
    //}
    //TLE
    //class Program
    //{
    //    static void Main(string[] args)
    //    {
    //        string[] In = Console.ReadLine().Split(' ');
    //        int n = int.Parse(In[0]);
    //        int m = int.Parse(In[1]);
    //        string[] In2 = Console.ReadLine().Split(' ');
    //        var H = new MinHeap(2 * n);
    //        for (int i = 0; i < n; i++)
    //        {
    //            H.Add(int.Parse(In2[i]));
    //        }
    //        for (int i = 0; i < m; i++)
    //        {
    //            string[] In3 = Console.ReadLine().Split(' ');
    //            int b = int.Parse(In3[0]);
    //            int c = int.Parse(In3[1]);
    //            if (c > H.Peek())
    //            {
    //                for (int j = 0; j < b; j++)
    //                {
    //                    H.Add(c);
    //                    H.Pop();
    //                }
    //            }
    //        }
    //        long ans = 0;
    //        while (!H.IsEmpty())
    //        {
    //            ans += H.Pop();
    //        }
    //        Console.WriteLine(ans);
    //    }
    //}
    //TLE
    //class Program
    //{
    //    static void Main(string[] args)
    //    {
    //        string[] In = Console.ReadLine().Split(' ');
    //        int n = int.Parse(In[0]);
    //        int m = int.Parse(In[1]);
    //        string[] In2 = Console.ReadLine().Split(' ');
    //        var L = new List<int>();
    //        for (int i = 0; i < n; i++)
    //        {
    //            L.Add(int.Parse(In2[i]));
    //        }
    //        L.Sort();
    //        for (int i = 0; i < m; i++)
    //        {
    //            string[] In3 = Console.ReadLine().Split(' ');
    //            int b = int.Parse(In3[0]);
    //            int c = int.Parse(In3[1]);
    //            if (c > L[0])
    //            {
    //                for (int j = 0; j < b; j++)
    //                {
    //                    L.Add(c);
    //                }
    //            }
    //        }
    //        L.Sort();
    //        L.Reverse();
    //        long ans = 0;
    //        int cnt = 0;
    //        while (cnt < n)
    //        {
    //            ans += L[cnt];
    //            cnt++;
    //        }
    //        Console.WriteLine(ans);
    //    }
    //}

    public class MinHeap
    {
        private readonly int[] _elements;
        private int _size;

        public MinHeap(int size)
        {
            _elements = new int[size];
        }

        private int GetLeftChildIndex(int elementIndex) => 2 * elementIndex + 1;
        private int GetRightChildIndex(int elementIndex) => 2 * elementIndex + 2;
        private int GetParentIndex(int elementIndex) => (elementIndex - 1) / 2;

        private bool HasLeftChild(int elementIndex) => GetLeftChildIndex(elementIndex) < _size;
        private bool HasRightChild(int elementIndex) => GetRightChildIndex(elementIndex) < _size;
        private bool IsRoot(int elementIndex) => elementIndex == 0;

        private int GetLeftChild(int elementIndex) => _elements[GetLeftChildIndex(elementIndex)];
        private int GetRightChild(int elementIndex) => _elements[GetRightChildIndex(elementIndex)];
        private int GetParent(int elementIndex) => _elements[GetParentIndex(elementIndex)];

        private void Swap(int firstIndex, int secondIndex)
        {
            var temp = _elements[firstIndex];
            _elements[firstIndex] = _elements[secondIndex];
            _elements[secondIndex] = temp;
        }

        public bool IsEmpty()
        {
            return _size == 0;
        }

        public int Peek()
        {
            if (_size == 0)
                throw new IndexOutOfRangeException();

            return _elements[0];
        }

        public int Pop()
        {
            if (_size == 0)
                throw new IndexOutOfRangeException();

            var result = _elements[0];
            _elements[0] = _elements[_size - 1];
            _size--;

            ReCalculateDown();

            return result;
        }

        public void Add(int element)
        {
            if (_size == _elements.Length)
                throw new IndexOutOfRangeException();

            _elements[_size] = element;
            _size++;

            ReCalculateUp();
        }

        private void ReCalculateDown()
        {
            int index = 0;
            while (HasLeftChild(index))
            {
                var smallerIndex = GetLeftChildIndex(index);
                if (HasRightChild(index) && GetRightChild(index) < GetLeftChild(index))
                {
                    smallerIndex = GetRightChildIndex(index);
                }

                if (_elements[smallerIndex] >= _elements[index])
                {
                    break;
                }

                Swap(smallerIndex, index);
                index = smallerIndex;
            }
        }

        private void ReCalculateUp()
        {
            var index = _size - 1;
            while (!IsRoot(index) && _elements[index] < GetParent(index))
            {
                var parentIndex = GetParentIndex(index);
                Swap(parentIndex, index);
                index = parentIndex;
            }
        }
    }
}


Measured memory_bytes: 60376