
struct fenwik {
    vector<int> t;
    int allsum;

    fenwik() {}
    fenwik(int n) {
        t = vector<int>(n, 0);
        allsum = 0;
    }
    int as() {
        return allsum;
    }
    int get(int r) {
        r++;
        int ans = 0;
        while (r > 0) {
            ans += t[r - 1];
            r -= r & -r;
        }
        return ans;
    }
    void add(int pos) {
        allsum++;
        pos++;
        while (pos <= t.size()) {
            t[pos - 1]++;
            pos += pos & -pos;
        }
    }
};

vector<int> tree[4 * maxn];
fenwik bit[4 * maxn];

int pos[maxn], a[maxn];

void build(int v, int tl, int tr) {
    bit[v] = fenwik(tr - tl + 1);
    if (tl == tr) {
        tree[v].pb(pos[tl]);
        return;
    }
    int tm = (tl + tr) >> 1;
    build(v<<1, tl, tm);
    build(v<<1|1, tm + 1, tr);
    merge(all(tree[v<<1]), all(tree[v<<1|1]), back_inserter(tree[v]));
}

void upd(int v, int tl, int tr, int pos) {
    int cur_it = lower_bound(all(tree[v]), ::pos[pos]) - tree[v].begin();
    bit[v].add(cur_it);
    
    if (tl == tr)
        return;
    int tm = (tl + tr) >> 1;
    if (pos <= tm)
        upd(v<<1, tl, tm, pos);
    else
        upd(v<<1|1, tm + 1, tr, pos);
}

int get(int v, int tl, int tr, int l, int r, int x) {
    if (l > r)
        return 0;
    if (tl == l && tr == r) {
        int cur_it = upper_bound(all(tree[v]), x) - tree[v].begin() - 1;
        return bit[v].as() - bit[v].get(cur_it);
    }
    int tm = (tl + tr) >> 1;
    return get(v<<1  , tl, tm, l, min(r, tm), x) + 
           get(v<<1|1, tm + 1, tr, max(l, tm + 1), r, x);
}

int main() {
    files;
    // freopen("input.txt", "r", stdin);
    int n, k;
    read(n, k);

    for (int i = 0; i < n; i++) {
        read(a[i]);
        a[i]--;
    }
    for (int i = 0; i < n; i++) {
        int x;
        read(x);
        x--;

        pos[x] = i;
    }
    build(1, 0, n - 1);

    ll ans = 0;
    for (int i = 0; i < n; i++) {
        int x = a[i];
        int res = 0;

        int r = x - k - 1;
        res += get(1, 0, n - 1, 0, r, pos[x]);

        int l = x + k + 1;
        res += get(1, 0, n - 1, l, n - 1, pos[x]);

        ans += res;
        upd(1, 0, n - 1, x);
    }
    cout << ans;
    return 0;
}