#include <bits/stdc++.h>
using namespace std;
bool visit[200000 + 50];
long long arr[200000 + 50], arr2[200000 + 50], a, b, c, d, e, f;
string str1, str2;
struct edge {
  int from, to, weight;
  bool operator<(const edge& thing) const { return thing.weight < weight; }
};
vector<edge> V[200000 + 50];
void addedge(int a, int b, int c) {
  edge temp;
  temp.from = a;
  temp.to = b;
  temp.weight = c;
}
bool cmp(long long a, long long b) { return a > b; }
void solve() {
  cin >> a >> b;
  long long sum = 0;
  long long mx = 0;
  for (int i = 0; i <= a - 1; i++) {
    cin >> arr[i];
    sum += arr[i];
    mx = max(arr[i], mx);
  }
  int yes = true;
  for (int i = 0; i <= b - 1; i++) {
    cin >> arr2[i];
    if (arr2[i] < mx) yes = false;
  }
  if (!yes)
    cout << "-1";
  else {
    sum *= b;
    sort(arr2, arr2 + b, cmp);
    sort(arr, arr + a, cmp);
    int index = 0, cnt = 0;
    for (int i = 0; i <= b - 2; i++) sum += arr2[i] - arr[0];
    if (arr2[b - 1] != arr[0]) sum += arr2[b - 1] - arr[1];
    cout << sum;
  }
}
int main() {
  int times = 1;
  for (int i = 0; i <= times - 1; i++) {
    solve();
    printf("\n");
  }
  return 0;
}
