#include <bits/stdc++.h>
using namespace std;
const int MAX = 10000 + 10;
int n, p[MAX], q[MAX], t[MAX], k;
int a[MAX], temp[MAX];
void work(int* a, int* p) {
  int i;
  for (i = 1; i <= n; ++i) temp[i] = a[p[i]];
  for (i = 1; i <= n; ++i) a[i] = temp[i];
}
int same(int* a, int* b) {
  int i;
  for (i = 1; i <= n; ++i)
    if (a[i] != b[i]) return 0;
  return 1;
}
int check() {
  int i;
  for (i = 1; i <= n; ++i) a[i] = i;
  if (same(a, t)) {
    if (k)
      return 0;
    else {
      printf("YES\n");
      return 1;
    }
  }
  for (i = 1; i <= k; ++i) {
    work(a, p);
    if (same(a, t)) {
      if (i == k) {
        printf("YES\n");
        return 1;
      }
      work(a, q);
      int o = i;
      while (i <= k) {
        if (same(a, t)) return 0;
        if ((i - o) % 2 == 0 && i != k)
          work(a, q);
        else
          work(a, p);
        ++i;
      }
      if (same(a, t)) {
        printf("YES\n");
        return 1;
      }
      return 0;
    }
  }
  return 0;
}
int main() {
  int i;
  scanf("%d%d", &n, &k);
  for (i = 1; i <= n; ++i) {
    scanf("%d", &p[i]);
    q[p[i]] = i;
  }
  for (i = 1; i <= n; ++i) scanf("%d", &t[i]);
  if (check()) return 0;
  for (i = 1; i <= n; ++i) swap(q[i], p[i]);
  if (check()) return 0;
  printf("NO\n");
  return 0;
}
