#line 1 "main.cpp" #include #include // #include "library/templates/template.cpp" using namespace atcoder; using namespace std; using ll = long long int; using ull = unsigned long long int; using ld = long double; using pii = pair; using pll = pair; long long solve(int N, int M, const std::vector &A, const std::vector &B) { // ... solve ll ans = 0; int j = 0; if (A[0] > B[0]) { ans += A[0] - B[0]; while (j < M && B[j] < A[0]) { j++; } } for (int i = 0; i + 1 < N; i++) { // A[i]...A[i+1]の間にあるB vector D; D.push_back(A[i]); while (j < M && B[j] < A[i + 1]) { D.push_back(B[j]); j++; } D.push_back(A[i + 1]); if (D.size() > 2) { ll mindiff = 0; for (int t = 0; t + 1 < D.size(); t++) { mindiff = max(mindiff, D[t + 1] - D[t] - 1); } ans += A[i + 1] - A[i] - 1 - mindiff; } } if (A[N - 1] < B[M - 1]) { ans += B[M - 1] - A[N - 1]; } return ans; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int N, M; std::cin >> N; std::vector A(N); std::cin >> M; std::vector B(M); for (int i = 0; i < N; ++i) { std::cin >> A[i]; } for (int i = 0; i < M; ++i) { std::cin >> B[i]; } auto ans = solve(N, M, A, B); std::cout << ans << '\n'; return 0; }