#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
void __never(int a) { printf("\nOPS %d", a); }
int La, Lb;
int A[1000100];
int B[1000100];
int F[1000100];
int pos[1000100];
void sol() {
  for (int a = (1); a <= (Lb); a++) pos[B[a]] = a;
  for (int a = (1); a <= (La); a++) {
    int i = a + 1;
    if (i > La) i = 1;
    if (!pos[A[a]])
      F[a] = 0;
    else if (!pos[A[i]])
      F[a] = 1;
    else
      F[a] = 2;
  }
  int be = 1, en = 1;
  int ans = 0;
  while (1) {
    if (be > La) break;
    if (F[be] != 0) {
      if (en >= be)
        ans = max(ans, en - be + 1);
      else
        ans = max(ans, La - be + 1 + en);
    }
    if (F[be] < 2) {
      {
        if (!(en == be)) {
          __never(58);
          cout.flush();
          cerr.flush();
          abort();
        }
      };
      en = (en == La ? 1 : en + 1);
      be++;
    } else {
      {
        if (!(F[en] != 0)) {
          __never(62);
          cout.flush();
          cerr.flush();
          abort();
        }
      };
      if (F[en] == 1)
        be++;
      else if (F[en] == 2) {
        if (pos[A[en]] < pos[A[be]]) {
          if (pos[A[en == La ? 1 : en + 1]] > pos[A[en]] &&
              pos[A[en == La ? 1 : en + 1]] < pos[A[be]])
            en = (en == La ? 1 : en + 1);
          else
            be++;
        } else {
          if (pos[A[en == La ? 1 : en + 1]] > pos[A[en]])
            en = (en == La ? 1 : en + 1);
          else if (pos[A[en == La ? 1 : en + 1]] < pos[A[be]])
            en = (en == La ? 1 : en + 1);
          else
            be++;
        }
      }
    }
  }
  cout << ans;
}
int main() {
  scanf("%d%d", &La, &Lb);
  for (int a = (1); a <= (La); a++) scanf("%d", &A[a]);
  for (int a = (1); a <= (Lb); a++) scanf("%d", &B[a]);
  sol();
  return 0;
}
