#include <bits/stdc++.h>   using namespace std;   const int sz = 1e3;   int adjm[sz + 1][sz + 1];   vector<int> adjl[(int)(1e6 + 1)];   vector<bool> vis((int)1e6 + 1, 0);   void init_adjm(int n) {     for (int i = 0; i <= n; i++) {       for (int j = 0; j <= n; j++) adjm[i][j] = 0;     }   }   void bfs(int s, int n, int m) {     queue<int> q;     q.push(s);     q.push(-1);     vis[s] = 1;     while (!q.empty()) {       int p = q.front();       q.pop();       if (p == -1) {         if (!q.empty()) {           q.push(-1);         }       } else {         for (int i = 0; i < adjl[p].size(); i++) {           int curr{adjl[p][i]};           if (!vis[curr]) {             q.push(curr);             vis[curr] = 1;           }         }       }     }   }   void dfs(int s) {     vis[s] = 1;     for (int i{0}; i < adjl[s].size(); i++) {       if (!vis[adjl[s][i]]) {         dfs(adjl[s][i]);       }     }   }   vector<bool> is_prime(1e6 + 1, true);   long long gcd(long long x, long long y) {     if (x == 0) return y;     return gcd(y % x, x);   }   void sievePrime(long long n) {     for (long long p{2}; p * p <= n; p++) {       if (is_prime[p]) {         for (long long i{p * p}; i <= n; i += p) {           is_prime[i] = false;         }       }     }   }   vector<int> SPF((int)1e6 + 1);   vector<long long> prime;   void manipulated_seive(int N) {     is_prime[0] = is_prime[1] = false;     for (int i = 2; i < N; i++) {       if (is_prime[i]) {         prime.push_back(i);         SPF[i] = i;       }       for (int j{0};            j < (int)prime.size() && i * prime[j] < N && prime[j] <= SPF[i]; j++) {         is_prime[i * prime[j]] = false;         SPF[i * prime[j]] = prime[j];       }     }   }   class my_compare {    public:     bool operator()(pair<int, int> &p1, pair<int, int> &p2) {       return p1.second < p2.second;     }   };   long long fact(int n) {     long long res{1};     for (int i = 2; i <= n; i++) res *= i;     return res;   }   long long nPr(int n, int r) {     long long num{1}, denom{1};     for (int i = 0; i < r; i++) {       denom *= (i + 1);       num *= (n - i);     }     return num / denom;   }   long long nCr(int n, int r) {     long long num{1}, denom{1};     for (int i = 0; i < r; i++) {       denom = (denom * (i + 1));       num = (num * (n - i));     }     return num / denom;   }   unsigned long long power(unsigned long long x, int y, int p) {     unsigned long long res = 1;     x = x % p;     while (y > 0) {       if (y & 1) res = (res * x) % p;       y = y >> 1;       x = (x * x) % p;     }     return res;   }   unsigned long long modInverse(unsigned long long n, int p) {     return power(n, p - 2, p);   }   unsigned long long nCrModPFermat(unsigned long long n, int r, int p) {     if (n < r) return 0;     if (r == 0) return 1;     unsigned long long fac[n + 1];     fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = (fac[i - 1] * i) % p;     return (fac[n] * (modInverse(fac[r], p) % p) *             (modInverse(fac[n - r], p) % p)) %            p;   }   void solve() {     int n, m, x;     cin >> n >> m;     multiset<int, greater<int>> reqd;     for (int i = 0; i < n; i++) {       cin >> x;       reqd.insert(x);     }     for (int i = 0; i < m; i++) {       cin >> x;       auto it = reqd.lower_bound(x);       if (it != reqd.end()) {         reqd.erase(it);       }     }     cout << reqd.size() <<   n ;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     bool test_case{0}, fileop{0};     if (fileop) {       freopen( input.txt ,  r , stdin);       freopen( output.txt ,  w , stdout);     }     int t;     if (test_case) {       cin >> t;       while (t--) {         solve();       }     } else       solve();   }