#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvl = vector<vll>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(),v.end()
long long min_total_length2(std::vector<int> r, std::vector<int> b) {
vpl ord;
if(b[0]<r[0])ord.pb({-1e15,1});
else ord.pb({-1e15,0});
for(ll i:b)ord.pb({i,0});
for(ll i:r)ord.pb({i,1});
sort(all(ord));
if(ord.back().s==1)ord.pb({1e15,0});
else ord.pb({1e15,1});
ll n = ord.size();
vvl dp(n, vll(4,1e15));
dp[0][1]=0;
ll las,ret;
for(ll i=1,j = 0;j<n; ++i){
vll al;las=ord[j].f;ll sm=0,am=0;
for(ll j2=j++;j<n && ord[j].s!=ord[j2].s; ++j){al.pb(ord[j].f);sm+=ord[j].f;}
if(j==n)break;
ll nx = ord[j--].f;am=al.size();
for(ll k = 0; k < 4; ++k){
for(ll p = 0; p < 4; ++p){
if(al.size()==1){
ll ans = dp[i-1][p];
if(k>1)ans += nx-al[0];
if(p%2==0)ans += al[0]-las;
if(k<2 && p%2==1 && k%2==1)ans += min(al[0]-las,nx-al[0]);
dp[i][k] = min<ll>(dp[i][k], ans);
}
else if(al.size()==2){
ll ans = dp[i-1][p];
if(p<2 && k%2==1){
if(k>1)ans += nx-al[1];
else ans += min(nx-al[1],al[1]-las);
if(p%2==0)ans += al[0]-las;
else ans += min(nx-al[0],al[0]-las);
}
else if(k%2==1){
if(k>1)ans += nx-al[1];
else if(p%2==0) ans += al[1]-las;
else ans += min(al[1]-las,nx-al[1]);
if(p%2==0 && k>1)ans += al[0]-las;
}
else if(p<2){
if(p%2==0)ans += al[0]-las;
else if(k>1) ans += nx-al[0];
else ans += min(nx-al[0],al[0]-las);
if(k>1 && p%2==0)ans += nx-al[1];
}
else{
if(k>1)ans += nx-al[1];
if(p%2==0)ans += al[0]-las;
}
dp[i][k] = min<ll>(dp[i][k], ans);
}
else if(k<2){
ll ans = dp[i-1][p]+sm-las*am;
if(k%2==0)ans -= al.back()-las;
if(p>1)ans -= al[0]-las;
dp[i][k] = min<ll>(dp[i][k], ans);
}
else if(p%2==1){
ll ans = dp[i-1][p];
if(k==3){
ans += nx-al.back();
for(ll t = 0; t < al.size()-1; ++t)ans+=min(al[t]-las,nx-al[t]);
if(p>1)ans-=min(al[0]-las,nx-al[0]);
}
else{
ans += min(nx-al.back()+al[al.size()-2]-las, nx-al[al.size()-2]);
for(ll t = 0; t < al.size()-2; ++t)ans+=min(al[t]-las,nx-al[t]);
if(p>1)ans-=min(al[0]-las,nx-al[0]);
}
dp[i][k] = min<ll>(dp[i][k], ans);
}
else{
ll ans = dp[i-1][p];
if(k==3 && p<2){
ans += nx-al.back();
ans += al[0]-las;
for(ll t = 1; t < al.size()-1; ++t)ans+=min(al[t]-las,nx-al[t]);
}
else if(p<2){
ans += min(nx-al.back()+al[al.size()-2]-las, nx-al[al.size()-2]);
ans += al[0]-las;
for(ll t = 1; t < al.size()-2; ++t)ans+=min(al[t]-las,nx-al[t]);
}
else if(k==3){
ans += min(al[0]-las+nx-al[1], al[1]-las);
ans += nx-al.back();
for(ll t = 2; t < al.size()-1; ++t)ans+=min(al[t]-las,nx-al[t]);
}
else if(al.size()>3){
ans += min(nx-al.back()+al[al.size()-2]-las, nx-al[al.size()-2]);
ans += min(al[0]-las+nx-al[1], al[1]-las);
for(ll t = 2; t < al.size()-2; ++t)ans+=min(al[t]-las,nx-al[t]);
}
else{
ans += min(nx-al[1]+al[0]-las, al[1]-las+nx-al[2]);
}
dp[i][k] = min<ll>(dp[i][k], ans);
}
}
}
ret = dp[i][1];
}
return ret;
}
long long min_total_length(std::vector<int> r, std::vector<int> b) {
ll sa=0,sb=0;
for(ll i:r)sa+=i;
for(ll i:b)sb+=i;
return sb-b[0]-(b.size()-1)*r.back()-(sa-r.back()-(r.size()-1)*b[0]);
}
// int main() {
// int n, m;
// assert(2 == scanf("%d %d", &n, &m));
// vector<int> r(n), b(m);
// for(int i = 0; i < n; i++)
// assert(1 == scanf("%d", &r[i]));
// for(int i = 0; i < m; i++)
// assert(1 == scanf("%d", &b[i]));
// long long res = min_total_length(r, b);
// printf("%lld\n", res);
// return 0;
// }
// int main(){
// ll n=1+rand()%10,m=1+rand()
// }