#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
template <class... Args>
istream& read_args(Args&... args) {
  return (cin >> ... >> args);
}
template <typename T>
istream& operator>>(istream& is, vector<T>& v) {
  for (auto& i : v) is >> i;
  return is;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& v) {
  for (auto& i : v) os << i << ' ';
  return os;
}
long long exp(long long x, long long ex) {
  long long ans = 1ll;
  while (ex > 0) {
    if (ex & 1ll) ans = (ans * x);
    ex >>= 1ll;
    x = (x * x);
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  while (t--) {
    long long n, m;
    read_args(n, m);
    vector<long long> a(n), b(m);
    cin >> a >> b;
    sort(a.begin(), a.end(), greater<long long>());
    sort(b.begin(), b.end());
    long long ma = a[0];
    bool ok = 1;
    for (long long i = (0); i < (long long)(m); i++) {
      if (b[i] < ma) ok = 0;
    }
    vector<long long> second(m);
    second[0] = b[0];
    for (long long i = (1); i < (long long)(m); i++)
      second[i] = second[i - 1] + b[i];
    if (ok) {
      long long ans = 0;
      if (b[0] != a[0]) {
        ans += second[m - 2] + a[0];
        ans += b[m - 1] + (m - 1) * a[1];
      } else {
        ans += second[m - 1];
        ans += (m)*a[1];
      }
      for (long long i = (2); i < (long long)(n); i++) ans += (m)*a[i];
      cout << ans << endl;
    } else
      cout << -1 << endl;
  }
  cerr << "Time taken : " << (long double)(clock()) / CLOCKS_PER_SEC << "s"
       << endl;
}
