#include <bits/stdc++.h>
using namespace std;
struct S {
  int a, b;
  S() {}
  S(int _a, int _b) {
    a = _a;
    b = _b;
  }
  const bool operator<(const S &o) const { return a < o.a; }
};
priority_queue<int, vector<int>, greater<int>> mpq;
const int SPACE = 0, NL = 1;
string exm;
inline void showAll(vector<int> &v, int sep) {
  for (int &here : v) printf("%d%c", here, (sep) ? '\n' : ' ');
}
inline void exf(void) {
  cout << exm << "\n";
  exit(0);
}
inline vector<int> int_seperation(int N, int d = 10) {
  vector<int> v;
  while (N) {
    v.push_back(N % d);
    N /= d;
  }
  reverse(v.begin(), v.end());
  return v;
}
const int SIZE = 100009;
int b[SIZE], g[SIZE];
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &b[i]);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d", &g[i]);
  }
  sort(b + 1, b + 1 + n, greater<int>());
  sort(g + 1, g + 1 + m);
  exm = "-1";
  if (b[1] > g[1]) exf();
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    ans = ans + (long long)m * b[i];
  }
  for (int i = 2; i <= m; i++) {
    ans += g[i] - b[1];
  }
  if (b[1] != g[1]) ans += g[1] - b[2];
  printf("%lld\n", ans);
  return 0;
}
