var
head,tail,tot,i,j,k,n,m,min:longint;
dn,dm:array[1..300]of longint;
a,pn,pm:array[0..1000000]of int64;
procedure go;
var i,j:longint;
begin
if pn[head]+2<=n then begin
inc(tail);pn[tail]:=pn[head]+1;pm[tail]:=pm[head];
a[tail]:=a[head]+dn[pn[tail]]*(pm[tail]+1); end;
if pm[head]+2<=m then begin
inc(tail);pm[tail]:=pm[head]+1;pn[tail]:=pn[head];
a[tail]:=a[head]+dm[pm[tail]]*(pn[tail]+1); end;
inc(head);
if (pn[tail]+1=n)and(pm[tail]+1=m)and(a[tail]<min) then min:=a[tail];
end;
Begin
assign(input,'cut.in');reset(input);
assign(output,'cut.out');rewrite(output);
readln(n,m);
for i:=1 to n-1 do read(dn[i]);
for i:=1 to m-1 do read(dm[i]);
if n=2 then if dn[1]<dn[2] then begin k:=dn[1];dn[1]:=dn[2];dn[2]:=k; end;
if n>2 then
for i:=1 to n-2 do
for j:=i+1 to n-1 do
if dn[i]<dn[j] then begin k:=dn[i];dn[i]:=dn[j];dn[j]:=k;end;
if m=2 then if dm[1]<dm[2] then begin k:=dm[1];dm[1]:=dm[2];dm[2]:=k;end;
if m>2 then
for i:=1 to m-2 do
for j:=i+1 to m-1 do
if dm[i]<dm[j] then begin k:=dm[i];dm[i]:=dm[j];dm[j]:=k ; end;
tot:=0;head:=0;tail:=0;min:=maxlongint;pn[0]:=0;pm[0]:=0;
fillchar(a,sizeof(a),0);
repeat
go;
until head>tail;
writeln(min);
end.