--lemma:n頂点n-1辺で閉路を持たないならば木である。
--proof:n=1の時、明らか。
--      n=kまでの題意を仮定する。辺を１つ削除すると、
--      閉路を持たないので真に頂点の少ない木が２つ出来、仮定よりこれらは木。
--      削除辺を復活させるとこれもまた木である。
--
--したがって、n頂点重み付きグラフの最小全域木は、閉路を構成しないn-1個の辺の選択の内、最小の選びかたをすればよい。
--次の貪欲法を考える：
--Kruskal:n頂点重み付きグラフに対して、最小重み辺を選択する。「既に選択した辺とで閉路をなさない」限りで小さい重みをもつ辺を順次n-1個選択する。
--theorem:Kruskalは最小全域木の１つを構成する。
--proof:最小全域木は必ず存在するのでこれをS、Kruskalで構成される全域木をKとし、この重みはSより大きいと仮定する。
--      S,Kの辺を重みでソートする。Kの並びは各々その構成時のものに一致させられる。この並びで最初に重みが食い違うS,Kの辺をe_s,e_kとする。
--      Kの構成法から、w(e_s)>=w(e_k)である。重みは異なるとしたのでw(e_s)>w(e_k)でなければならない。
--      しかしSにおいてe_kとe_sを入れ替えたものをS'とすると、
--      S'は全域木であり、かつw(S')<w(S)で最小性に反する。したがって、Kの重みはSに一致し、Kruskalは最小全域木の１つを構成する。

--問題の場合、(W+1)*(H+1)格子グラフ上で、辺をソートし、Kruskalにしたがって、閉路を回避しつつ選択できる辺の重み総和を計算すればよい。
--最初の最小重み辺p_iH+1個(として一般性を失わない)は確実に選択できる。次の重み辺からは閉路を回避する必要があり、その条件は
--p_k重み辺H+1個から選択する場合：特に条件なし。
--q_jW+1個から選択する場合：(i,j)-(i+1,j),(i,j+1)-(i+1,j+1)が既にあるのでこれに接続する二辺はどちらか一方のみしか選択できない。
--となる。ところが以上の条件に該当する辺の数は、
--(i,j)-(i+1,j),(i,j+1)-(i+1,j+1)を縮約したW*(H+1)格子グラフ上での、
--p_k重み辺H+1個
--q_j重み辺W個((i,j)-(i,j+1),(i+1,j)-(i+1,j+1)は同一視される)
--に一致する。((W+1)*(H+1)->W*(H+1)格子グラフ準同型が存在する)。つまり問題を変形した上で、まっさらなところから選び直せる。
--したがってこの問題は次の再帰構造をもつ：
--solver(W,H,[p],[q])=let x = min[p,q] in if x==p_i then (H+1)*x+solver(W-1,H,[p]\p_i,[q])
--                                   else if x==q_j then (W+1)*x+solver(W,H-1,[p],[q]\q_j)
--solver(0,0,[][])=0

import Text.Regex
import GHC.Exts

data PQ = P | Q deriving (Eq,Show)

main::IO()
main =do
  wh<-getLine
  let w:h:[]=map read (words wh)::[Int]
  ps<-get_n w
  qs<-get_n h
  let pp= map (\x->(P,x)) ps
  let qq= map (\x->(Q,x)) qs
  let pq= sortWith (\(_,x)->x) (pp++qq)
  print (solver w h pq)

get_n::Int -> IO [Int]
get_n 0 = return []
get_n n = do
          c<-getLine
          let m = read c ::Int
          rest<- (get_n (n-1))
          return (m:rest)

solver::Int -> Int -> [(PQ,Int)] -> Int
solver 0 0 [] = 0
solver w h ((P,p_i):rest) = ((h+1)*p_i)+(solver (w-1) h rest)
solver w h ((Q,q_j):rest) = ((w+1)*q_j)+(solver w (h-1) rest)