constexpr bool isDebugMode = false;
int testcase = 1;
#include <bits/stdc++.h>
#if __has_include(<atcoder/all>)
    #include <atcoder/all>
    using namespace atcoder;
#endif
using namespace std;
typedef long long ll;
typedef pair<long long, long long> P;
struct edge{long long to,cost;};
const int inf = 1 << 27;
const long long INF = 1LL << 60;
const int COMBMAX = 1001001;
const long long MOD = 1000000007; //998244353;
const long long dy[] = {-1, 0, 0, 1};
const long long dx[] = {0, -1, 1, 0};
const string abc = "abcdefghijklmnopqrstuvwxyz";
#define rep(i, n) for(int i = 0; i < (n); ++i)
#define eachdo(v, e) for (const auto &e : (v))
#define all(v) (v).begin(), (v).end()
#define lower_index(v, e) (long long)distance((v).begin(), lower_bound((v).begin(), (v).end(), e))
#define upper_index(v, e) (long long)distance((v).begin(), upper_bound((v).begin(), (v).end(), e))
long long mpow(long long a, long long n, long long mod = MOD){long long res = 1; while(n > 0){if(n & 1)res = res * a % mod; a = a * a % mod; n >>= 1;} return res;}
void pt(){cout << endl; return;}
template<class Head> void pt(Head&& head){cout << head; pt(); return;}
template<class Head, class... Tail> void pt(Head&& head, Tail&&... tail){cout << head << " "; pt(forward<Tail>(tail)...);}
void dpt(){if(!isDebugMode) return; cout << endl; return;}
template<class Head> void dpt(Head&& head){if(!isDebugMode) return; cout << head; pt(); return;}
template<class Head, class... Tail> void dpt(Head&& head, Tail&&... tail){if(!isDebugMode) return; cout << head << " "; pt(forward<Tail>(tail)...);}
template<class T> void enu(T v){rep(i, v.size()) cout << v[i] << " " ; cout << endl;}
template<class T> void enu2(T v){rep(i, v.size()){rep(j, v[i].size()) cout << v[i][j] << " " ; cout << endl;}}
template<class T> void debug(T v){if(!isDebugMode) return; rep(i, v.size()) cout << v[i] << " " ; cout << endl;}
template<class T> void debug2(T v){if(!isDebugMode) return; rep(i, v.size()){rep(j, v[i].size()) cout << v[i][j] << " " ; cout << endl;}}
template<class T1, class T2> inline bool chmin(T1 &a, T2 b){if(a > b){a = b; return true;} return false;}
template<class T1, class T2> inline bool chmax(T1 &a, T2 b){if(a < b){a = b; return true;} return false;}
template<class T1, class T2> long long recgcd(T1 a, T2 b){return a % b ? recgcd(b, a % b) : b;}
bool valid(long long H, long long W, long long h, long long w) { return 0 <= h && h < H && 0 <= w && w < W; }

void solve();

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(15);
    // cin >> testcase;
    while(testcase--) solve();
    return 0;
}

void solve(){
    ll N, M; cin >> N >> M;
    vector<ll> h(N);
    vector<ll> w(M);
    rep(i, N) cin >> h[i];
    rep(i, M) cin >> w[i];
    sort(all(h));
    vector<ll> head(N / 2);
    vector<ll> tail(N / 2);
    ll hn = N / 2;
    rep(i, hn){
        head[i] = abs(h[2 * i] - h[2 * i + 1]);
        tail[i] = abs(h[N - 1 - 2 * i] - h[N - 2 - 2 * i]);
    }
    vector<ll> shead(hn + 1);
    vector<ll> stail(hn + 1);
    rep(i, hn){
        shead[i + 1] = shead[i] + head[i];
        stail[i + 1] = stail[i] + tail[i];
    }
    // enu(shead);
    // enu(stail);
    ll ans = INF;
    rep(i, M){
        ll ins = lower_index(h, w[i]);
        if(ins % 2 == 0){
            chmin(ans, shead[ins / 2] + abs(w[i] - h[ins]) + stail[N / 2 - ins / 2]);
        }else{
            chmin(ans, shead[ins / 2] + abs(w[i] - h[ins - 1]) + stail[N / 2 - ins / 2]);
        }
    }
    pt(ans);
}
#include <bits/stdc++.h>

using namespace std;

#define ll int64_t 
#define ull uint64_t
#define vi vector<int>
#define vll vector<ll>
#define vull vector<ull>
#define vvi vector<vector<int>>
#define FOR(i, n) for (int i = 0; i < n; i++)
#define CONCAT_INNER(a, b) a ## b
#define CONCAT(a, b) CONCAT_INNER(a, b)
#define REP(n) FOR(CONCAT(_i, __COUNTER__), n)
#define pb push_back
#define ALL(x) x.begin(), x.end()
#define SORT(x) sort(ALL(x))
#define IN(x, l, r) (l < x && x < r)
#define MOD 1000000007
#define EPS 10e-9
#define ii pair<int, int>
#define DIR4 {{0,1}, {1,0}, {0,-1}, {-1,0}}
#define DIR8 {{0,1}, {0,-1}, {1,0}, {-1,0}, {-1,-1}, {-1,1}, {1,-1}, {1,1}}
#define fst(x) (x).first
#define snd(x) (x).second
#define SZ(x) ((int) (x).size())
#define inc(c, v) (c.find(v) != c.end())
#define SKIP(c) if (c) continue
#define MODM(n, m) ((n) % m + m) % m
#define LOG2I(n) (31 - __builtin_clz(n))

void test_case() {
  int x, y;
  cin >> x >> y;
  if (x == y) cout << x << endl;
  else cout << 3 - x - y << endl;
}  

int main(void) {
  ios_base::sync_with_stdio(false);
  cin.tie(0);

  // cout << fixed << setprecision(6); 

  int t = 1;
  // cin >> t;
  FOR(i, t) {
    test_case();
  }
}

