from heapq import heapify, heappop, heappush

def resolve():
  N, M = map(int, input().split(" "))
  A = [int(x) for x in input().split(" ")]
  sortedA = sorted(A)
  integraA = [0, sortedA[0]]

  # O[N]
  for i in range(1, N):
    integraA.append(integraA[-1] + sortedA[i])
  # print(integraA)
  # O[M]
  heap_tasks = []
  heapify(heap_tasks)
  for _ in range(M):
    B, C = map(int, input().split(" "))
    heappush(heap_tasks, ((-1)*C, B))
  

  # O[M]
  start_index = 0
  result = integraA[-1]
  for _ in range(M):
    task = heappop(heap_tasks)
    C = (-1) * task[0]
    B = task[1]
    # B が残りよりも多かった場合、残りに合わせる。
    if start_index + B > N:
      B = N - start_index

    if B == 0:
      break

    # print("task =", B, C)
    if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
  print(result)

if __name__ == "__main__":
  resolve() from heapq import heapify, heappop, heappush def resolve():
  N, M = map(int, input().split(" "))
  A = [int(x) for x in input().split(" ")]
  sortedA = sorted(A)
  integraA = [0, sortedA[0]]

  # O[N]
  for i in range(1, N):
    integraA.append(integraA[-1] + sortedA[i])
  # print(integraA)
  # O[M]
  heap_tasks = []
  heapify(heap_tasks)
  for _ in range(M):
    B, C = map(int, input().split(" "))
    heappush(heap_tasks, ((-1)*C, B))
  

  # O[M]
  start_index = 0
  result = integraA[-1]
  for _ in range(M):
    task = heappop(heap_tasks)
    C = (-1) * task[0]
    B = task[1]
    # B が残りよりも多かった場合、残りに合わせる。
    if start_index + B > N:
      B = N - start_index

    if B == 0:
      break

    # print("task =", B, C)
    if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
  print(result) resolve N, M = map(int, input().split(" ")) N map(int, input().split(" ")) map int input().split(" ") ().split () input split " " M int(x) for x in input().split(" ") for x in input().split(" ") x input().split(" ") ().split () input split " " for x in input().split(" ") int(x) int x A = [int(x) for x in input().split(" ")] A [int(x) for x in input().split(" ")] sortedA = sorted(A) sortedA sorted(A) sorted A integraA = [0, sortedA[0]] integraA [0, sortedA[0]] 0 sortedA[0] sortedA 0 for i in range(1, N):
    integraA.append(integraA[-1] + sortedA[i])
  # print(integraA)
  # O[M]
   i range(1, N) range 1 N integraA.append(integraA[-1] + sortedA[i]) integraA.append integraA append integraA[-1] + sortedA[i] integraA[-1] integraA -1 sortedA[i] sortedA i heap_tasks = [] heap_tasks [] heapify(heap_tasks) heapify heap_tasks for _ in range(M):
    B, C = map(int, input().split(" "))
    heappush(heap_tasks, ((-1)*C, B))
  

  # O[M]
   _ range(M) range M B, C = map(int, input().split(" ")) B map(int, input().split(" ")) map int input().split(" ") ().split () input split " " C heappush(heap_tasks, ((-1)*C, B)) heappush heap_tasks ((-1)*C, B) (-1)*C -1 C B start_index = 0 start_index 0 result = integraA[-1] result integraA[-1] integraA -1 for _ in range(M):
    task = heappop(heap_tasks)
    C = (-1) * task[0]
    B = task[1]
    # B が残りよりも多かった場合、残りに合わせる。
    if start_index + B > N:
      B = N - start_index

    if B == 0:
      break

    # print("task =", B, C)
    if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
   _ range(M) range M task = heappop(heap_tasks) task heappop(heap_tasks) heappop heap_tasks C = (-1) * task[0] C (-1) * task[0] -1 task[0] task 0 B = task[1] B task[1] task 1 if start_index + B > N:
      B = N - start_index

     start_index + B > N start_index + B start_index B N B = N - start_index B N - start_index N start_index if B == 0:
      break

    # print("task =", B, C)
     B == 0 B 0 break if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
   sortedA[start_index + B - 1] <= C sortedA[start_index + B - 1] sortedA start_index + B - 1 start_index + B start_index B 1 C result += B*C - (integraA[start_index + B] - integraA[start_index]) result B*C - (integraA[start_index + B] - integraA[start_index]) B*C B C integraA[start_index + B] - integraA[start_index] integraA[start_index + B] integraA start_index + B start_index B integraA[start_index] integraA start_index start_index += B start_index B if start_index >= N:
        break
     start_index >= N start_index N break elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
     sortedA[start_index] >= C sortedA[start_index] sortedA start_index C break while sortedA[start_index + B - 1] > C:
        B -= 1
       sortedA[start_index + B - 1] > C sortedA[start_index + B - 1] sortedA start_index + B - 1 start_index + B start_index B 1 C B -= 1 B 1 result += B*C - (integraA[start_index + B] - integraA[start_index]) result B*C - (integraA[start_index + B] - integraA[start_index]) B*C B C integraA[start_index + B] - integraA[start_index] integraA[start_index + B] integraA start_index + B start_index B integraA[start_index] integraA start_index break print(result) print result if __name__ == "__main__":
  resolve() __name__ == "__main__" __name__ "__main__" resolve() resolve def resolve():
  N, M = map(int, input().split(" "))
  A = [int(x) for x in input().split(" ")]
  sortedA = sorted(A)
  integraA = [0, sortedA[0]]

  # O[N]
  for i in range(1, N):
    integraA.append(integraA[-1] + sortedA[i])
  # print(integraA)
  # O[M]
  heap_tasks = []
  heapify(heap_tasks)
  for _ in range(M):
    B, C = map(int, input().split(" "))
    heappush(heap_tasks, ((-1)*C, B))
  

  # O[M]
  start_index = 0
  result = integraA[-1]
  for _ in range(M):
    task = heappop(heap_tasks)
    C = (-1) * task[0]
    B = task[1]
    # B が残りよりも多かった場合、残りに合わせる。
    if start_index + B > N:
      B = N - start_index

    if B == 0:
      break

    # print("task =", B, C)
    if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
  print(result) def resolve():
  N, M = map(int, input().split(" "))
  A = [int(x) for x in input().split(" ")]
  sortedA = sorted(A)
  integraA = [0, sortedA[0]]

  # O[N]
  for i in range(1, N):
    integraA.append(integraA[-1] + sortedA[i])
  # print(integraA)
  # O[M]
  heap_tasks = []
  heapify(heap_tasks)
  for _ in range(M):
    B, C = map(int, input().split(" "))
    heappush(heap_tasks, ((-1)*C, B))
  

  # O[M]
  start_index = 0
  result = integraA[-1]
  for _ in range(M):
    task = heappop(heap_tasks)
    C = (-1) * task[0]
    B = task[1]
    # B が残りよりも多かった場合、残りに合わせる。
    if start_index + B > N:
      B = N - start_index

    if B == 0:
      break

    # print("task =", B, C)
    if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
  print(result) resolve
from heapq import heapify, heappop, heappush

def resolve():
  N, M = map(int, input().split(" "))
  A = [int(x) for x in input().split(" ")]
  sortedA = sorted(A)
  integraA = [0, sortedA[0]]

  # O[N]
  for i in range(1, N):
    integraA.append(integraA[-1] + sortedA[i])
  # print(integraA)
  # O[M]
  heap_tasks = []
  heapify(heap_tasks)
  for _ in range(M):
    B, C = map(int, input().split(" "))
    heappush(heap_tasks, ((-1)*C, B))
  

  # O[M]
  start_index = 0
  result = integraA[-1]
  for _ in range(M):
    task = heappop(heap_tasks)
    C = (-1) * task[0]
    B = task[1]
    # B が残りよりも多かった場合、残りに合わせる。
    if start_index + B > N:
      B = N - start_index

    if B == 0:
      break

    # print("task =", B, C)
    if sortedA[start_index + B - 1] <= C:
      # 対象範囲の全てが C より小さかったら全て置き換える。
      # print("diff", (integraA[start_index + B] - integraA[start_index]))
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      start_index += B
      if start_index >= N:
        break
    elif sortedA[start_index] >= C:
      # 対象範囲の全てが C 以上だったら置き換えせずに終了。
      break
    else:
      # 対象範囲の一部が C 未満だったらその部分だけ置き換えて終了 (残りは全て C 以上になることが保証されているので)
      while sortedA[start_index + B - 1] > C:
        B -= 1
      result += B*C - (integraA[start_index + B] - integraA[start_index])
      break
  print(result)

if __name__ == "__main__":
  resolve()