#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
#define u unsigned
#define ll long long
#define sc scanf
#define pr printf
#define fr(i, j, n) for (int i = j; i < n; i++)
#define N 100000
int a[N];
int b[N];
typedef int ELEMENT;
void quickSort(ELEMENT *a, int low, int high);
void swap(ELEMENT *a, int low, int high);
int* partition(ELEMENT *a, int low, int high, ELEMENT key);
int min(int a, int b)
{
return a >= b? b: a;
}
int main(int argc, char* argv[])
{
int m, n;
scanf("%d%d", &m, &n);
for (int i = 0; i < m; i++) {
scanf("%d", a + i);
}
for (int j = 0; j < n; j++) {
scanf("%d", b + j);
}
quickSort(a, 0, m - 1);
ll minsum = 0;
for (int j = 0; j < n; j++) {
int l = 0;
int r = m - 1;
int ans = -1;
while(l <= r) {
int mid = (l + r) / 2;
if (a[mid] >= b[j]) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
if (ans == 0) {
minsum += abs(a[ans] - b[j]);
}
else {
minsum += min(abs(a[ans] - b[j]), abs(a[ans - 1] - b[j]));
}
}
printf("%lld", minsum);
return 0;
}
void quickSort(ELEMENT *a, int low, int high)
{
int *p = NULL;
if ( low >= high) {
return ;
}
p = partition(a, low, high, a[low + rand() % (high - low + 1)]);
quickSort(a, low, p[0] - 1);
quickSort(a, p[1] + 1, high);
free(p);
}
void swap(ELEMENT *a, int low, int high)
{
ELEMENT t = 0;
t = a[low];
a[low] = a[high];
a[high] = t;
}
int* partition(ELEMENT *a, int low, int high, ELEMENT key)
{
int l = low;
int r = high;
int i = low;
while(i <= r) {
if (a[i] < key) {
swap(a, l++, i++);
}
else if ( a[i] > key){
swap(a, r--, i);
}
else {
i++;
}
}
int *p = (int *)malloc(sizeof(int ) * 2);
p[0] = l;
p[1] = r;
return p;
}