#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
  long long N, M; cin >> N >> M;
  vector<long long> H(N), W(M);
  for (long long i = 0; i < N; i++) cin >> H[i];
  for (long long i = 0; i < M; i++) cin >> W[i];
  sort(H.begin(), H.end());
  vector<long long> sum1((N + 1) / 2), sum2((N + 1) / 2);
  for(long long i = 0; i + 1 < N; i += 2) sum1[i / 2 + 1] = sum1[i / 2] + H[i + 1] - H[i];
  for(long long i = N - 2; i > 0; i -= 2) sum2[i / 2] = sum2[i / 2 + 1] + H[i + 1] - H[i];
  long long result = 1e18;
  for (long long i = 0; i < M; i++) {
    long long ind = lower_bound(H.begin(), H.end(), W[i]) - H.begin();
    if (ind % 2 == 1) ind--;
    long long tmp = sum1[ind/2]+sum2[ind/2]+abs(W[i]-H[ind]);
    result = result > tmp ? tmp : result;
  }
  cout << result << endl;
  return 0;
}
/*
मनस्वी म्रियते कामं कार्पण्यं न तु गच्छति ।
अपि निर्वाणमायाति नानलो याति शीतताम् ॥
*/

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp> 
// #include <ext/pb_ds/tree_policy.hpp> 
// using namespace __gnu_pbds;
using namespace std;

#define mod 1000000007
#define pb push_back
#define ll long long int
#define ull unsigned ll
#define ld long double
#define vi vector<int>
#define vl vector<ll>
#define v2i vector<vector<int>>
#define v2l vector<vector<ll>>
#define ppi pair<int,int>
#define ppl pair<ll,ll>
#define vpi vector<ppi>
#define vpl vector<ppl>
#define all(x) x.begin(),x.end()
#define ff first    
#define ss second
#define forn(i,a,b) for(int i=a;i<b;i++)
#define forr(i,a,b) for(int i=a;i>=b;i--)
#define forv(i,m) for(auto i : m)
#define p2d(v) for(auto a:v){for(auto b:a)cout<<b<<" ";cout<<endl;}
#define p1d(v) for(auto a:v)cout<<a<<" ";cout<<endl;
#define ppd(v) for(auto a:v)cout<<a.ff<<" "<<a.ss<<endl;
#define imx INT_MAX
#define imn INT_MIN
#define inf 9000000000000000000
#define minf -inf
#define endl "\n"
#define fast ios_base::sync_with_stdio(false);cin.tie(NULL);
#define sze size()
#define rvs reverse 
#define itr iterator 
#define pre cout<<fixed<<setprecision(10);
#define umap unordered_map
#define uset unordered_set
#define pi 3.141592653589793
#define MAXN 100005
#define test1(x) cout << #x " = " << x << endl;
#define test2(x,y) cout << #x " = " << x << " " << #y " = " << y << endl;
#define test3(x,y,z) cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << endl;
#define test4(w,x,y,z) cout << #w " = " << w << " " << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << endl;
#define oset tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>

/*
const ll infinity = 9e18;

bool compare(ll a,ll b) {return a > b;}
bool compare1(ppl a,ppl b) {return a.ff > b.ff;}
bool compare2(ppl a,ppl b) {return a.ss < b.ss;}
bool isprime(ll n){if(n < 2) return 0; ll i = 2; while(i*i <= n){if(n%i == 0) return 0; i++;} return 1;}

ll Npower(ll a,ll b) {ll product = 1; while(b){if(b&1){product = product*a;}a = a*a;b = b>>1;} return product;}
ll power(ll a,ll b,ll md = mod) {ll product = 1; while(b){if(b&1){product = (product*a)%md;}a = (a*a)%md;b = b>>1;} return product%md;}
ll GCD(ll a,ll b) {return b==0 ? a:GCD(b,a%b);}
ll LCM(ll a,ll b) {return (a/GCD(a,b))*b; }
*/




int main()
{
    fast

/*
    #ifndef ONLINE_JUDGE
        freopen("input.txt",  "r",  stdin);
        freopen("output.txt", "w", stdout);
    #endif
//*/

        
    ll n,m;
    cin>>n>>m;

    vl a(n),b(m);

    forn(i,0,n)
    {
        cin>>a[i];
    }
        
    forn(i,0,m)
    {
        cin>>b[i];
    }        

    sort(all(a));
    sort(all(b));

    ll mid = a[(n/2)];

    ll total = 0;


    vl c(n,0),d(n,0);

    for(int i = 1; i < n; i += 2)
    {
        c[i] = total + (a[i]-a[i-1]);
        if(i+1 < n) c[i+1] = c[i];
        total = c[i];
    }

    total = 0;

    for(int i = n-2; i >= 0; i -= 2)
    {
        d[i] = total + (a[i+1]-a[i]);
        if(i-1 >= 0) d[i-1] = d[i];
        total = d[i];
    }

    // p1d(c)
    // p1d(d)

    ll mini = inf;

    forn(i,0,m)
    {
        ll idx = upper_bound(all(a),b[i]) - a.begin();
        // test1(idx)

        ll x = idx-1 >= 0 ? c[idx-1] : 0;
        ll y = idx < n ? d[idx] : 0;

        if((idx&1))
        {
            // x = idx-1 >= 0 ? c[idx-1] : 0;
            // y = idx < n ? d[idx] : 0;
            // test1(a[idx-1])
            mini = min(mini,x + abs(b[i]-a[idx-1]) + y);
        }
        else
        {
            // test1(a[idx-1])
            mini = min(mini,x + abs(a[idx]-b[i]) + y);
        }

        // test3(x,y,x + abs(a[idx]-b[i]) + y)
    }

    cout<<mini;


    return 0;
}       