#include<bits/stdc++.h>
// #pragma GCC optimize("Ofast,no-stack-protector")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
using namespace std;
#define ll long long
int rangeOR(int &l , int &r, vector<vector<int>> &cnt)
{
    int ans = 0;
    for(int i = 0 ; i < 20 ; i++)
    {
        if(cnt[i][r] - cnt[i][l - 1]  > 0)
            ans|=(1<<i);
    }
    return ans;
}
void run_case()
{
    int n ;
    cin>>n ;
    vector<ll> a(n + 1) ;
    vector<int> b(n + 1);
    vector<vector<int>> cnt(20 , vector<int>(n + 1));
    for(int i = 1 ; i <= n ; i++)
    {
        cin>>a[i];
        a[i]*=a[i];
        a[i]+=a[i - 1];
    }
    for(int i = 1 ; i <= n; i++)
    {
        for(int j = 0 ; j < 20 ; j++)
        {
            cnt[j][i] = cnt[j][i - 1];
        }
        cin>>b[i];
        for(int j = 0 ; j < 20 ; j++)
        {
            if((1<<j) & b[i])
            {
                cnt[j][i]++;
            }
        }
    }
    ll ans = 0;
    vector<vector<int>> pre(20 , vector<int>(n + 1));
    for(int i = 1 ;i <= n ;i++)
    {
        for(int j = 0 ; j < 20 ; j++)
        {
            pre[j][i] = upper_bound(cnt[j].begin() + i , cnt[j].end() , cnt[j][i - 1]) - cnt[j].begin() - 1;
        }
    }
    for(int i = 1 ; i <= n ; i++)
    {
        int cur = i;
        while(cur <= n)
        {
            ll val = rangeOR(i , cur , cnt);
            int lo = n;
            for(int j = 0 ; j <20 ;j ++)
            {
                if((1<<j) & val)
                    continue;
                lo = min(lo , pre[j][i]);
            }
            ans+=lower_bound(a.begin() + cur , a.begin() + lo + 1 , a[i - 1] + val*val)-(a.begin() + cur);
            cur = lo + 1;
        }
    }
    cout<<ans<<'\n';
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    // cin>>t;
    while (t--)
    {
        run_case();
    }
    
}