// NOIP 2023 T3
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
const int N = 2e5 + 5, INF = 2e9 + 5;
int a[N], b[N], d[N], cnt, ans;
int maxl[N], minl[N], h[N], c[N], suf1[N], suf2[N], g[N];
bool vis[N];
int main()
{
int n, m;
cin >> n >> m;
int D = -1e9, F = 1e9;
for (int i = 1; i <= m; i++) cin >> b[i];
for (int i = 1; i <= n; i++)
{
cin >> a[i];
a[i] = -a[i];
D = max(D, a[i]), F = min(F, a[i]);
}
minl[0] = INF;
maxl[1] = minl[1] = a[1];
for (int i = 2; i <= n; i++)
{
maxl[i] = max(maxl[i - 1], a[i]);
minl[i] = min(minl[i - 1], a[i]);
}
suf1[n] = suf2[n] = a[n];
suf2[n + 1] = INF;
for (int i = n - 1; i > 0; i--)
{
suf1[i] = max(suf1[i + 1], a[i]);
suf2[i] = min(suf2[i + 1], a[i]);
}
for (int i = 1; i <= m; i++)
{
if (b[i] >= D)
{
d[++cnt] = i;
vis[i] = true;
c[cnt]=1;
}
else
{
h[i] = upper_bound(maxl + 1, maxl + n + 1, b[i]) - maxl - 1;
int l = 1, r = n, pos = n + 1;
while (l <= r)
{
int mid = l+r >> 1;
if (suf1[mid] <= b[i]) r = mid - 1, pos = mid;
else l = mid + 1;
}
g[i] = pos;
}
}
int x = 0, y, z;
for (int i = d[1]; i <= m; i++)
{
if (vis[i])
{
x++;
y = d[i];
z = INF;
continue;
}
z = min(z, b[i]);
if (z >= suf2[g[i]])
{
c[x]++;
z = INF;
}
}
bool ok = false;
for (int i = cnt - 1; i > 0; i--)
{
ok = true;
for(int j = d[i + 1] - 1; j > d[i];j--)
{
if (b[j] < F)
{
ok = false;
break;
}
}
if (ok) c[i] += c[i + 1];
}
x = cnt + 1;
for (int i = d[cnt]; i > 0; i--)
{
if (vis[i])
{
x--;
y = d[i];
z = INF;
ans += c[x];
continue;
}
z = min(z, b[i]);
if (z >= minl[h[i]])
{
ans += c[x];
z = INF;
}
}
cout << ans << endl;
return 0;
}