#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()

using namespace std;

long long Konflikt(int N,int M,int *A,int *B){
    if(N<=10 && M<=20)
    {
        long long best = 1e18;
        vector<int> nizb(N+1, -1e9);
        for(int i=1; i<=N; i++)nizb[i] = B[i];
        sort(nizb.begin(), nizb.end());
        for(int i=1; i<=2*M; i++)
        {
            vector<int> niz(N);
            niz[0] = -1e9;
            for(int j=1; j<=N; j++)niz[j-1] = (A[j]+i)%M;
            sort(niz.begin(), niz.end());
            do
            {
                long long trrez = 0;
                for(int j=1; j<=N; j++)trrez+= min(abs(niz[j-1] - B[j]), M- abs(abs(niz[j-1] - B[j])));
                best = min(best, trrez);
            }while(next_permutation(niz.begin(), niz.end()));
        }
        return best;
    }
    else
    {
         vector<int> nizb(N);
        for(int i=1; i<=N; i++)nizb[i-1] = B[i];
        vector<int> niza(N);
        for(int j=1; j<=N; j++)niza[j-1] = A[j];
        sort(all(niza));
        sort(all(nizb));
        vector<int> p(N);
        for(int i=0; i<N; i++)p[i] = nizb[i] - niza[i];
        int trpoz = 0;
        long long best = 1e18;
        long long prerazlika = 0;
        long long rez = 0;
        for(int i=0; i<N; i++)rez+= p[i];
        best = rez;
        sort(all(p));
        while(trpoz <N)
        {
            int prepoz = trpoz;
            trpoz = (upper_bound(all(p), p[trpoz])-p.begin());
            long long trelement = p[trpoz-1];
            rez+=(prepoz*(trelement-prerazlika)) - (trpoz-prepoz)*trelement -trelement*(N-trpoz);
            best = min(best,rez);
        }
        return best;
    }

}

/*
3 100
0 2 6
5 7 19
*/