#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const double eps = 1e-9;
const double pi = acos(-1.0);
const int maxn = (int)1e5 + 10;
const int maxm = 2005;
int a[maxn], p[maxm], L[maxn], R[maxn];
int d1[maxn], d2[maxn];
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  sort(a, a + n);
  L[0] = 0;
  for (int i = 1; i < n; i++) {
    if (a[i] == a[i - 1] + 1) {
      L[i] = L[i - 1];
    } else {
      L[i] = i;
    }
  }
  R[n - 1] = n - 1;
  for (int i = n - 2; i >= 0; i--) {
    if (a[i] == a[i + 1] - 1) {
      R[i] = R[i + 1];
    } else {
      R[i] = i;
    }
  }
  for (int i = 0; i < m; i++) cin >> p[i];
  sort(p, p + m);
  for (int i = 0; i < n; i++) {
    if (i > 0) {
      d1[i] = d2[i - 1];
      d2[i] = max(d2[i], d2[i - 1]);
    }
    int ptr = -1;
    while (ptr + 1 < m && p[ptr + 1] <= a[i]) ptr++;
    int j;
    for (j = 0; j < m && p[j] <= a[i]; j++)
      if (i >= a[i] - p[j]) {
        int lst = L[i - (a[i] - p[j])];
        lst = lst > 0 ? d2[lst - 1] : 0;
        d1[i] = max(d1[i], ptr - j + 1 + lst);
      }
    d2[i] = max(d2[i], d1[i]);
    for (; j < m && p[j] > a[i]; j++) {
      if (n - i < p[j] - a[i] + 1) break;
      int lst = R[i + p[j] - a[i]];
      d2[lst] = max(d2[lst], d1[i] + j - ptr);
    }
  }
  cout << d2[n - 1] << endl;
  return 0;
}
