#include <bits/stdc++.h>
using namespace std;
bool u(int a, int b){
    if(a>=b){
        return true ;
    }
    else{
        return false ;
    }
}
long long Konflikt(int N,int M,int *A,int *B){
    sort(A+1,A+N+1,u) ;
    sort(B+1,B+N+1,u) ;
    vector<int> poz(N) ;
    long long vp=0, vn=0 ;
    long long z=0 ;
    long long mz=1e15 ;
    vector<int> over(N) ;
    for(int i=1 ; i<=N ; i++){
        if(A[i]<=B[i]){
            poz.push_back(B[i]-A[i]) ;
            vp++ ;
            z+=B[i]-A[i] ;
        }
        else{
            vn++ ;
            z+=A[i]-B[i] ;
        }
        over.push_back(M-A[i]) ;
    }
    int os=N-1 ;
    int lo=0 ;
    mz=min(mz,z) ;
    sort(poz.begin(),poz.end(),u) ;
    poz.clear() ;
    sort(over.begin(),over.end(),u) ;
    for(int i=1 ; i<M ; i++){
        if(os>=0 && i==over[os]){
            vp=0 ;
            vn=0 ;
            z=0 ;
            while(os>=0 && i==over[os]){
                over.pop_back() ;
                os-- ;
            }
            poz.clear() ;
            for(int j=1 ; j<=N ; j++){
                A[j]=(A[j]+i-lo)%M ;
            }
            lo=i ;
            sort(A+1,A+N+1,u) ;
            for(int j=1 ; j<=N ; j++){
                if(A[j]<=B[j]){
                    poz.push_back(B[j]-A[j]) ;
                    vp++ ;
                    z+=B[j]-A[j] ;
                }
                else{
                    vn++ ;
                    z+=A[j]-B[j] ;
                }

            }
            mz=min(z,mz) ;
            sort(poz.begin(),poz.end(),u) ;
        }
        else{
            int ind=vp-1 ;
            while(vp>0 && poz[ind]-i+lo<0){
                poz.pop_back() ;
                ind-- ;
                vp-- ;
                vn++;
            }
            z=z-vp+vn ;
            mz=min(z,mz) ;
        }
    }
    return mz;
}