#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
inline void smax(int &x, int y) { x = max(x, y); }
inline void smin(int &x, int y) { x = min(x, y); }
ll gcd(ll a, ll b) { return ((b == 0) ? a : gcd(b, a % b)); }
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m;
  cin >> n >> m;
  vector<ll> b(n);
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n)))
    cin >> b[i];
  vector<ll> g(m);
  for (__typeof(m) i = (0) - ((0) > (m)); i != (m) - ((0) > (m));
       i += 1 - 2 * ((0) > (m)))
    cin >> g[i];
  if (n == 1) {
    int f = 0;
    for (__typeof(g.size()) i = (0) - ((0) > (g.size()));
         i != (g.size()) - ((0) > (g.size())); i += 1 - 2 * ((0) > (g.size())))
      if (b[0] == g[i]) f = 1;
    if (f == 0) {
      cout << -1 << endl;
      exit(0);
    }
  }
  if (m == 1) {
    int f = 0;
    for (__typeof(b.size()) i = (0) - ((0) > (b.size()));
         i != (b.size()) - ((0) > (b.size())); i += 1 - 2 * ((0) > (b.size())))
      if (b[i] == g[0]) f = 1;
    if (f == 0) {
      cout << -1 << endl;
      exit(0);
    }
  }
  sort(b.begin(), b.end());
  sort(g.begin(), g.end());
  if (b.back() > g.front()) {
    cout << -1;
    exit(0);
  }
  ll ans = 0;
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n)))
    ans += b[i] * m;
  ll minv = 1000000007;
  for (__typeof(m) i = (0) - ((0) > (m)); i != (m) - ((0) > (m));
       i += 1 - 2 * ((0) > (m))) {
    ans += g[i] - b.back();
    minv = min(minv, g[i] - b.back());
  }
  if (minv > 0) {
    ans += b.back() - b[b.size() - 2];
  }
  cout << ans << endl;
}
