George decided to prepare a Codesecrof round, so he has prepared *m* problems for the round. Let's number the problems with integers 1 through *m*. George estimates the *i*-th problem's complexity by integer *b*<sub class="lower-index">*i*</sub>.

To make the round good, he needs to put at least *n* problems there. Besides, he needs to have at least one problem with complexity exactly *a*<sub class="lower-index">1</sub>, at least one with complexity exactly *a*<sub class="lower-index">2</sub>, ..., and at least one with complexity exactly *a*<sub class="lower-index">*n*</sub>. Of course, the round can also have problems with other complexities.

George has a poor imagination. It's easier for him to make some already prepared problem simpler than to come up with a new one and prepare it. George is magnificent at simplifying problems. He can simplify any already prepared problem with complexity *c* to any positive integer complexity *d* (*c* ≥ *d*), by changing limits on the input data.

However, nothing is so simple. George understood that even if he simplifies some problems, he can run out of problems for a good round. That's why he decided to find out the minimum number of problems he needs to come up with in addition to the *m* he's prepared in order to make a good round. Note that George can come up with a new problem of any complexity.
The first line contains two integers *n* and *m* (1 ≤ *n*, *m* ≤ 3000) — the minimal number of problems in a good round and the number of problems George's prepared. The second line contains space-separated integers *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*n*</sub> (1 ≤ *a*<sub class="lower-index">1</sub> &lt; *a*<sub class="lower-index">2</sub> &lt; ... &lt; *a*<sub class="lower-index">*n*</sub> ≤ 10<sup class="upper-index">6</sup>) — the requirements for the complexity of the problems in a good round. The third line contains space-separated integers *b*<sub class="lower-index">1</sub>, *b*<sub class="lower-index">2</sub>, ..., *b*<sub class="lower-index">*m*</sub> (1 ≤ *b*<sub class="lower-index">1</sub> ≤ *b*<sub class="lower-index">2</sub>... ≤ *b*<sub class="lower-index">*m*</sub> ≤ 10<sup class="upper-index">6</sup>) — the complexities of the problems prepared by George.
from math import *
from collections import *
from bisect import *
import heapq
import math

def is_prime(n):

    for i in range(2,math.ceil(math.sqrt(n))):
        if(n%i==0):
            return False
    return True

def sieve(n):
    arr=[True for _ in range(n+1)]

    for i in range(2,math.ceil(math.sqrt(n))):
        if(arr[i]==True):
            for j in range(i*i,n+1,i):
                arr[j]=False

    return arr


def power(x, y, p):
    res = 1  # Initialize result

    # Update x if it is more
    # than or equal to p
    x = x % p

    if (x == 0):
        return 0

    while (y > 0):

        # If y is odd, multiply
        # x with result
        if ((y & 1) == 1):
            res = (res * x) % p

        # y must be even now
        y = y >> 1  # y = y/2
        x = (x * x) % p

    return res

def euclidean_distance(x1,y1,x2,y2):
    return sqrt(abs(x1-x2)**2+abs(y1-y2)**2)


def solve():
    # s=input()
    # n=int(input())
    n,m=list(map(int,input().split()))

    lis1=list(map(int,input().split()))
    lis2 = list(map(int, input().split()))

    lis1.sort()
    lis2.sort()

    i=len(lis1)-1
    ans=0
    while(i>=0):
        x=lis1[i]
        ind=bisect_left(lis2,x)
        if(ind!=len(lis2)):
            lis2.pop()
        else:
            ans+=1
        i-=1
    print(ans)


if __name__ == '__main__':
    n=1
    # n=int(input())
    while(n):
        n-=1
        solve()




