#include <bits/stdc++.h>
using namespace std;
const long long maxn = 4e5;
const long double SADAT = 7.84e-17;
const long long INF = 1e9;
const long long mod = 1e9 + 7;
const long double PI = 4 * atan((long double)1);
long long pw(long long a, long long b) {
  return (!b ? 1
             : (b & 1 ? a * pw(a * a % mod, b / 2) % mod
                      : pw(a * a % mod, b / 2) % mod));
}
int n, m, ans = 0;
vector<int> sz;
vector<int> b;
int c[50];
bool ibit(int x, int i) { return ((x & (1 << i))); }
void prc(int x) {
  for (int i = 0; i < 32; i++) {
    if (ibit(x, i)) {
      c[i]++;
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  memset(c, 0, sizeof c);
  ;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int inp;
    cin >> inp;
    sz.push_back(inp);
    ;
    prc(inp);
  }
  int cnt = 0;
  for (int i = 0; i < m; i++) {
    int inp;
    cin >> inp;
    b.push_back(inp);
    ;
  }
  sort(b.begin(), b.end());
  for (int i = 0; i < m; i++) {
    for (int j = b[i]; j <= 30; j++) {
      if (c[j]) {
        ans++;
        c[j]--;
        for (int k = b[i]; k < j; k++) {
          c[k]++;
        }
        break;
      }
    }
  }
  cout << ans;
  return (0);
}
