#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 500005;
const int MOD = 1e9 + 7;
int tree[MAX_N];
void update(int pos, int val) {
for (int i = pos; i < MAX_N; i += i & -i) {
(tree[i] += val) %= MOD;
}
}
int query(int pos) {
int res = 0;
for (int i = pos; i > 0; i -= i & -i) {
(res += tree[i]) %= MOD;
}
return res;
}
int n, m;
int a[MAX_N], b[MAX_N];
int pos[MAX_N], pw2[MAX_N];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
freopen("SETSEQ.inp", "r", stdin);
freopen("SETSEQ.out", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= m; i++) {
cin >> b[i];
}
bool chk = false;
pos[0] = 0;
for (int i = 1, j = 1; i <= n; i++) {
if (a[i] == b[j]) {
pos[j] = i;
if (++j == m + 1) {
chk = true;
break;
}
}
}
if (!chk) {
cout << -1 << "\n";
return 0;
}
pw2[0] = 1;
for (int i = 1; i <= n; i++) {
pw2[i] = pw2[i - 1] * 2 % MOD;
}
int ans = m;
for (int i = m, j = n; i >= 1; i--) {
while (j >= pos[i - 1] + 1) {
update(a[j], pw2[n - j]);
j--;
}
(ans += query(b[i] - 1)) %= MOD;
}
cout << ans << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWF9OID0gNTAwMDA1Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKCmludCB0cmVlW01BWF9OXTsKCnZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpIHsKICAgIGZvciAoaW50IGkgPSBwb3M7IGkgPCBNQVhfTjsgaSArPSBpICYgLWkpIHsKICAgICAgICAodHJlZVtpXSArPSB2YWwpICU9IE1PRDsKICAgIH0KfQoKaW50IHF1ZXJ5KGludCBwb3MpIHsKICAgIGludCByZXMgPSAwOwogICAgZm9yIChpbnQgaSA9IHBvczsgaSA+IDA7IGkgLT0gaSAmIC1pKSB7CiAgICAgICAgKHJlcyArPSB0cmVlW2ldKSAlPSBNT0Q7CiAgICB9CgogICAgcmV0dXJuIHJlczsKfQoKaW50IG4sIG07CmludCBhW01BWF9OXSwgYltNQVhfTl07CmludCBwb3NbTUFYX05dLCBwdzJbTUFYX05dOwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CgogICAgZnJlb3BlbigiU0VUU0VRLmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigiU0VUU0VRLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBjaW4gPj4gbiA+PiBtOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGNpbiA+PiBiW2ldOwogICAgfQoKICAgIGJvb2wgY2hrID0gZmFsc2U7CiAgICBwb3NbMF0gPSAwOwogICAgZm9yIChpbnQgaSA9IDEsIGogPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChhW2ldID09IGJbal0pIHsKICAgICAgICAgICAgcG9zW2pdID0gaTsKICAgICAgICAgICAgaWYgKCsraiA9PSBtICsgMSkgewogICAgICAgICAgICAgICAgY2hrID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICghY2hrKSB7CiAgICAgICAgY291dCA8PCAtMSA8PCAiXG4iOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHB3MlswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBwdzJbaV0gPSBwdzJbaSAtIDFdICogMiAlIE1PRDsKICAgIH0KCiAgICBpbnQgYW5zID0gbTsKICAgIGZvciAoaW50IGkgPSBtLCBqID0gbjsgaSA+PSAxOyBpLS0pIHsKICAgICAgICB3aGlsZSAoaiA+PSBwb3NbaSAtIDFdICsgMSkgewogICAgICAgICAgICB1cGRhdGUoYVtqXSwgcHcyW24gLSBqXSk7CiAgICAgICAgICAgIGotLTsKICAgICAgICB9CgogICAgICAgIChhbnMgKz0gcXVlcnkoYltpXSAtIDEpKSAlPSBNT0Q7CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKCiAgICByZXR1cm4gMDsKfQoK