#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;
}