← Home
#include <algorithm>
#include <iostream>
#define fast ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define rep(i,n) for (i=1; i<=n; ++i)
using namespace std;
 
constexpr int N = 200009, M = 2009;
 
int main() {
    fast;
    int n, m; cin >> n >> m;
    int a[N], i;
    rep(i,n) cin >> a[i];
    sort(a + 1, a + n + 1);
    a[0] = a[1] - 1000, a[n+1] = a[n] + 1000;
    int L[N], R[N];
    rep(i,n) {
        if (a[i] == a[i-1] + 1) L[i] = L[i-1];
        else L[i] = i;
    }
    for (i = n; i; --i) {
        if (a[i] == a[i+1] - 1) R[i] = R[i+1];
        else R[i] = i;
    }
    int sum[N], b[M]; sum[0] = 0;
    rep(i,m) cin >> b[i], sum[b[i]]++;
    sort(b + 1, b + m + 1);
    rep(i,200000) sum[i] += sum[i-1];
    int dp[N];
    rep(i,n) {
        dp[i] = max(dp[i], dp[i-1]);
        int mx;
        if (L[i] == i) mx = dp[i-1] + sum[a[i]] - sum[a[i]-1];
        else mx = -10000000;
        dp[i] = max(dp[i], mx);
        for (int l = 1; b[l] <= a[i] && l <= m; ++l) {
            if (i - (a[i] - b[l]) >= 1) {
                dp[i] = max(dp[i], dp[L[i-(a[i]-b[l])]-1]+sum[a[i]]-sum[b[l]-1]);
                mx = max(mx, dp[L[i-(a[i]-b[l])]-1]+sum[a[i]]-sum[b[l]-1]);
            }
        }
        for (int r = m; b[r] >= a[i] && r; --r) {
            if (i + b[r] - a[i] <= n) 
                dp[R[i+b[r]-a[i]]] = max(dp[R[i+b[r]-a[i]]], mx+sum[b[r]]-sum[a[i]]);
        }
    }
    cout << dp[n] << '\n';
    return 0;
}