哎,卡在最后一行
//哎,最后没想到之贪心最后两行就可以
//bi,i行最小值
//ai,i列最大值
//min a < max b ,-1
#define int unsigned long long
signed main()
{
int n,m;cin>>n>>m;
vector<int> b(n),a(m);cin>>b>>a;
sort(all(a)),sort(all(b));
if(a[0]< b[n-1]) return puts("-1"),0;
int ans = 0;
rep(i,n-1) ans+=b[i] * m;//前几行全填最小值
rep(i,m) ans+=a[i] ;//最后一行补充a[i] 的最大值
//如果a[0] != b[ n-1] ,最后一行的最小值无法满足,由贪心。,向次小中加一个ai的最大值
if(a[0]!=b[n-1])
{
ans -= b[n-2];//倒数第二行空出来一个位置
//ans += a[x] ans-= a[x] //倒数第一行随便踢出去哪一列的,随即加到倒数第二行
ans += b[n-1];//加上倒数第一列的最小值
}
cout <<ans<<endl;
return 0;
}