//单调栈
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
stack<int>s;
while(!s.empty()) s.pop();
int z=INF;
for(int i=0;i<n;i++)
{
int k;
scanf("%d",&k);
if(k<z) z=k;
s.push(z);
}
int solve=0;
for(int i=0;i<m;i++)
{
int k;
scanf("%d",&k);
while(!s.empty())
{
if(k>s.top()) s.pop();
else{
solve++;
s.pop();
break;
}
}
}
cout<<solve<<endl;
return 0;
}
//单调栈
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e4+5;
struct feature{
int id,value;
};
int main()
{
int n;
scanf("%d",&n);
feature s[maxn];
int cnt1=0;
int solve=0;
for(int i=1;i<=n;i++)
{
int x,cnt2;
scanf("%d",&x);
feature f;
f.id=i, f.value = x;
if(cnt1==0 || s[cnt1-1].value>x)
s[cnt1++]=f;
else {
cnt2=cnt1;
while(s[cnt1-1].value<=x)
{
solve=max( solve , i-s[cnt1-1].id);
cnt1--;
if(cnt1==-1) break;
}
cnt1=cnt2;
}
}
printf("%d\n",solve);
return 0;
}