#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000;
const int MAXM = 64;
int n, m, b[MAXM];
map<int, long long> cluster;
map<int, int> resMap;
void remove(int k, long long v) {
  cluster[-k] -= v;
  if (!cluster[-k]) {
    cluster.erase(-k);
  }
}
void add(int k, long long v) { cluster[-k] += v; }
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (0); i < (n); i++) {
    int a;
    scanf("%d", &a);
    add(a, 1);
  }
  for (int i = (0); i < (m); i++) {
    int t;
    scanf("%d", &t);
    b[t]++;
  }
  for (int bit = MAXM - 1; bit >= 0; bit--)
    for (int _ = (0); _ < (b[bit]); _++) {
      if (!cluster.empty()) {
        int k = -cluster.begin()->first, v = -cluster.begin()->second;
        if (k >= 1 << bit) {
          remove(k, 1);
          add(k - (1 << bit), 1);
          resMap[bit]++;
          continue;
        }
      }
      for (typeof((resMap).begin()) it = (resMap).begin(); it != (resMap).end();
           it++) {
        if (it->first > bit) {
          resMap[it->first]--;
          if (!resMap[it->first]) {
            resMap.erase(it->first);
          }
          resMap[bit]++;
          add(1 << bit, (1 << (it->first - bit)) - 1);
          break;
        }
      }
    }
  int res = 0;
  for (typeof((resMap).begin()) it = (resMap).begin(); it != (resMap).end();
       it++) {
    res += it->second;
  }
  printf("%d\n", res);
  return 0;
}
