#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
vector<int> a(n), b(m);
vector<int> coords;
for (int i = 0; i < n; ++i) {
cin >> a[i];
coords.push_back(a[i]);
}
for (int i = 0; i < m; ++i) {
cin >> b[i];
coords.push_back(b[i]);
}
sort(coords.begin(), coords.end());
coords.erase(unique(coords.begin(), coords.end()), coords.end());
auto get_id = [&](int x) {
return lower_bound(coords.begin(), coords.end(), x) - coords.begin();
};
for (int &x : a) x = get_id(x);
for (int &x : b) x = get_id(x);
int k = coords.size();
vector<vector<int>> pos_a(k), pos_b(k);
for (int i = 0; i < n; ++i) pos_a[a[i]].push_back(i);
for (int i = 0; i < m; ++i) pos_b[b[i]].push_back(i);
vector<vector<pair<int, int>>> pairs_a(k), pairs_b(k);
for (int i = 0; i < k; ++i) {
for (size_t j = 0; j + 1 < pos_a[i].size(); j += 2) {
pairs_a[i].push_back({pos_a[i][j], pos_a[i][j+1]});
}
for (size_t j = 0; j + 1 < pos_b[i].size(); j += 2) {
pairs_b[i].push_back({pos_b[i][j], pos_b[i][j+1]});
}
}
vector<int> dp(m + 1, 0);
for (int i = 0; i < n; ++i) {
int val = a[i];
int first_occ = -1, second_occ = -1;
size_t idx = lower_bound(pos_a[val].begin(), pos_a[val].end(), i) - pos_a[val].begin();
if (idx + 1 < pos_a[val].size()) {
first_occ = pos_a[val][idx];
second_occ = pos_a[val][idx+1];
if (i == first_occ) {
int current_max = 0;
for (int j = 0; j < m; ++j) {
if (b[j] == val) {
size_t b_idx = lower_bound(pos_b[val].begin(), pos_b[val].end(), j) - pos_b[val].begin();
if (b_idx + 1 < pos_b[val].size()) {
int b_second = pos_b[val][b_idx + 1];
int prev_val = current_max;
dp[b_second + 1] = max(dp[b_second + 1], prev_val + 2);
}
}
current_max = max(current_max, dp[j + 1]);
}
}
}
}
int result = 0;
for (int val : dp) result = max(result, val);
cout << result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bWFwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCBuLCBtOwogICAgY2luID4+IG4gPj4gbTsKCiAgICB2ZWN0b3I8aW50PiBhKG4pLCBiKG0pOwogICAgdmVjdG9yPGludD4gY29vcmRzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICBjb29yZHMucHVzaF9iYWNrKGFbaV0pOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICBjaW4gPj4gYltpXTsKICAgICAgICBjb29yZHMucHVzaF9iYWNrKGJbaV0pOwogICAgfQoKICAgIHNvcnQoY29vcmRzLmJlZ2luKCksIGNvb3Jkcy5lbmQoKSk7CiAgICBjb29yZHMuZXJhc2UodW5pcXVlKGNvb3Jkcy5iZWdpbigpLCBjb29yZHMuZW5kKCkpLCBjb29yZHMuZW5kKCkpOwoKICAgIGF1dG8gZ2V0X2lkID0gWyZdKGludCB4KSB7CiAgICAgICAgcmV0dXJuIGxvd2VyX2JvdW5kKGNvb3Jkcy5iZWdpbigpLCBjb29yZHMuZW5kKCksIHgpIC0gY29vcmRzLmJlZ2luKCk7CiAgICB9OwoKICAgIGZvciAoaW50ICZ4IDogYSkgeCA9IGdldF9pZCh4KTsKICAgIGZvciAoaW50ICZ4IDogYikgeCA9IGdldF9pZCh4KTsKCiAgICBpbnQgayA9IGNvb3Jkcy5zaXplKCk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHBvc19hKGspLCBwb3NfYihrKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSBwb3NfYVthW2ldXS5wdXNoX2JhY2soaSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG07ICsraSkgcG9zX2JbYltpXV0ucHVzaF9iYWNrKGkpOwoKICAgIHZlY3Rvcjx2ZWN0b3I8cGFpcjxpbnQsIGludD4+PiBwYWlyc19hKGspLCBwYWlyc19iKGspOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyArK2kpIHsKICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiArIDEgPCBwb3NfYVtpXS5zaXplKCk7IGogKz0gMikgewogICAgICAgICAgICBwYWlyc19hW2ldLnB1c2hfYmFjayh7cG9zX2FbaV1bal0sIHBvc19hW2ldW2orMV19KTsKICAgICAgICB9CiAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogKyAxIDwgcG9zX2JbaV0uc2l6ZSgpOyBqICs9IDIpIHsKICAgICAgICAgICAgcGFpcnNfYltpXS5wdXNoX2JhY2soe3Bvc19iW2ldW2pdLCBwb3NfYltpXVtqKzFdfSk7CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGRwKG0gKyAxLCAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgaW50IHZhbCA9IGFbaV07CiAgICAgICAgaW50IGZpcnN0X29jYyA9IC0xLCBzZWNvbmRfb2NjID0gLTE7CiAgICAgICAgCiAgICAgICAgc2l6ZV90IGlkeCA9IGxvd2VyX2JvdW5kKHBvc19hW3ZhbF0uYmVnaW4oKSwgcG9zX2FbdmFsXS5lbmQoKSwgaSkgLSBwb3NfYVt2YWxdLmJlZ2luKCk7CiAgICAgICAgaWYgKGlkeCArIDEgPCBwb3NfYVt2YWxdLnNpemUoKSkgewogICAgICAgICAgICBmaXJzdF9vY2MgPSBwb3NfYVt2YWxdW2lkeF07CiAgICAgICAgICAgIHNlY29uZF9vY2MgPSBwb3NfYVt2YWxdW2lkeCsxXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChpID09IGZpcnN0X29jYykgewogICAgICAgICAgICAgICAgaW50IGN1cnJlbnRfbWF4ID0gMDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGJbal0gPT0gdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBiX2lkeCA9IGxvd2VyX2JvdW5kKHBvc19iW3ZhbF0uYmVnaW4oKSwgcG9zX2JbdmFsXS5lbmQoKSwgaikgLSBwb3NfYlt2YWxdLmJlZ2luKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiX2lkeCArIDEgPCBwb3NfYlt2YWxdLnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJfc2Vjb25kID0gcG9zX2JbdmFsXVtiX2lkeCArIDFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXZfdmFsID0gY3VycmVudF9tYXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcFtiX3NlY29uZCArIDFdID0gbWF4KGRwW2Jfc2Vjb25kICsgMV0sIHByZXZfdmFsICsgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY3VycmVudF9tYXggPSBtYXgoY3VycmVudF9tYXgsIGRwW2ogKyAxXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaW50IHJlc3VsdCA9IDA7CiAgICBmb3IgKGludCB2YWwgOiBkcCkgcmVzdWx0ID0gbWF4KHJlc3VsdCwgdmFsKTsKICAgIGNvdXQgPDwgcmVzdWx0IDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=