#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 2e5 + 10;
long long ans;
int n, p, start, mid, lg[maxn], a[maxn][25], b[maxn][25];
int geta(int l, int r) {
if (l == r) return *a[l];
p = log2(r - l + 1);
return max(a[l][p], a[r - (1 << p) + 1][p]);
}
int getb(int l, int r) {
if (l == r) return *b[l];
p = log2(r - l + 1);
return min(b[l][p], b[r - (1 << p) + 1][p]);
}
int search_l(int l, int r) {
start = l;
while (l < r) {
mid = l + r >> 1;
if (geta(start, mid) >= getb(start, mid)) r = mid;
else l = mid + 1;
}
return l;
}
int search_r(int l, int r) {
start = l;
while (l < r) {
mid = l + r + 1 >> 1;
if (geta(start, mid) >= getb(start, mid)) l = mid;
else r = mid - 1;
}
return l;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", a[i]);
for (int i = 1; i <= n; i++) scanf("%d", b[i]);
for (int j = 1; j <= lg[n]; j++) {
for (int i = 1; i <= n + 1 - (1 << j); i++) {
a[i][j] = max(a[i][j - 1], a[i + (1 << j - 1)][j - 1]);
b[i][j] = min(b[i][j - 1], b[i + (1 << j - 1)][j - 1]);
}
}
for (int i = 1; i <= n; i++) {
if (*a[i] > *b[i] || geta(i, n) > getb(i, n)) continue;
ans += search_r(i, n) - search_l(i, n) + 1;
}
printf("%d\n", ans);
return 0;
}