#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <cmath>#include <map>usingnamespacestd;
#define maxn 200005int n;
int a[maxn], b[maxn];
int dp1[maxn][21], dp2[maxn][21];
void rmq_init () {
for (int i = 0; i < n; i++) dp1[i][0] = a[i];
for (int j = 1; (1<<j) <= n; j++) {
for (int i = 0; i+(1<<j)-1 < n; i++) {
dp1[i][j] = max (dp1[i][j-1], dp1[i+(1<<(j-1))][j-1]);
}
}
for (int i = 0; i < n; i++) dp2[i][0] = b[i];
for (int j = 1; (1<<j) <= n; j++) {
for (int i = 0; i+(1<<j)-1 < n; i++) {
dp2[i][j] = min (dp2[i][j-1], dp2[i+(1<<(j-1))][j-1]);
}
}
}
int rmq_max (int l, int r) {
int k = 0;
while ((1<<(k+1)) <= r-l+1) k++;
return max (dp1[l][k], dp1[r-(1<<k)+1][k]);
}
int rmq_min (int l, int r) {
int k = 0;
while ((1<<(k+1)) <= r-l+1) k++;
return min (dp2[l][k], dp2[r-(1<<k)+1][k]);
}
void solve () {
rmq_init ();
longlong ans = 0;
for (int i = 0; i < n; i++) {
int l = i, r = n-1;
while (r-l > 1) {
int mid = (l+r)>>1;
if (rmq_min (i, mid)- rmq_max (i, mid) > 0) l = mid;
else r = mid;
}
int L;
if (rmq_min (i, l) - rmq_max (i, l) == 0) L = l;
elseif (rmq_min (i, r) - rmq_max (i, r) == 0) L = r;
elsecontinue;
l = i, r = n-1;
while (r-l > 1) {
int mid = (l+r)>>1;
if (rmq_min (i, mid) - rmq_max (i, mid) < 0) r = mid;
else l = mid;
}
int R;
if (rmq_min (i, r) - rmq_max (i, r) == 0) R = r;
elseif (rmq_min (i, l) - rmq_max (i, l) == 0) R = l;
elsecontinue;
ans += (R-L+1);
}
cout << ans << endl;
}
int main () {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) cin >> b[i];
solve ();
return0;
}