#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<cassert>
#include<cassert>
#include<unordered_map>
#include<unordered_set>
#include<functional>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<sstream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<numeric>
#include<random>
#include<chrono>
#include<bitset>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define xx first
#define yy second
#define sz(x) (int)(x).size()
#define gc getchar
#define IO ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define mp make_pair
#ifndef ONLINE_JUDGE
# define LOG(x) (cerr << #x << " = " << (x) << endl)
#else
# define LOG(x) ((void)0)
#endif
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const double PI=acos(-1);
const ll INF = 1LL<<62;
const ll MINF = -(1LL<<62);
template<typename T> T getint() {
T val=0;
char c;
bool neg=false;
while((c=gc()) && !(c>='0' && c<='9')) {
neg|=c=='-';
}
do {
val=(val*10)+c-'0';
} while((c=gc()) && (c>='0' && c<='9'));
return val*(neg?-1:1);
}
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_int_distribution<int>(0, n-1)(rng)
vector<int> a,b,pos;
vector<int> dp;
vector<int> solve(int l, int r) {
if(l==r) {
if(pos[l]>=l) dp[l]=max(dp[l], 1);
return {l};
}
int mid=(l+r)/2;
vector<int> lst=solve(l, mid);
lst.reserve(r-l+1);
if(mid+1<=r) {
for(int i=mid+1;i<=r;++i) lst.pb(i);
sort(lst.begin()+mid+1-l, lst.end(), [&](int x, int y) -> bool {
return a[x]<a[y];
});
}
inplace_merge(lst.begin(),lst.begin()+mid+1-l,lst.end(), [&](int x, int y) -> bool {
return a[x]<a[y];
});
set<pair<int,int>> st; //{i-pos[i], dp[i]}
for(auto i:lst) {
if(i<=mid) {
st.insert(mp(i-pos[i], dp[i]));
auto it=st.lower_bound(mp(i-pos[i], dp[i]));
while(it!=st.begin() && prev(it)->yy<=it->yy) st.erase(prev(it));
if(next(it)!=st.end() && next(it)->yy>=it->yy) st.erase(it);
}else {
auto it=st.lower_bound(mp(i-pos[i]-1, 0));
if(it!=st.end()) {
dp[i]=max(dp[i], it->yy+1);
}
}
}
solve(mid+1, r);
return lst;
}
int main() {
IO;
int n,m;
cin>>n>>m;
a=vector<int>(n);
b=vector<int>(m);
for(int i=0;i<n;++i) {
cin>>a[i];
}
for(int i=0;i<m;++i) {
cin>>b[i];
}
n++;
a.pb(1e9+1);
sort(all(b));
pos=vector<int>(n);
for(int i=0;i<n;++i) {
pos[i]=lower_bound(all(b),a[i])-b.begin();
}
dp=vector<int>(n,-1e9);
solve(0,n-1);
cout<<n-dp[n-1]<<"\n";
return 0;
}