#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, const U &b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, const U &b) {
  if (a < b) a = b;
}
template <class T>
inline void gn(T &first) {
  char c, sg = 0;
  while (c = getchar(), (c > '9' || c < '0') && c != '-')
    ;
  for ((c == '-' ? sg = 1, c = getchar() : 0), first = 0; c >= '0' && c <= '9';
       c = getchar())
    first = (first << 1) + (first << 3) + c - '0';
  if (sg) first = -first;
}
template <class T1, class T2>
inline void gn(T1 &x1, T2 &x2) {
  gn(x1), gn(x2);
}
template <class T1, class T2, class T3>
inline void gn(T1 &x1, T2 &x2, T3 &x3) {
  gn(x1, x2), gn(x3);
}
template <class T1, class T2, class T3, class T4>
inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4) {
  gn(x1, x2, x3), gn(x4);
}
template <class T1, class T2, class T3, class T4, class T5>
inline void gn(T1 &x1, T2 &x2, T3 &x3, T4 &x4, T5 &x5) {
  gn(x1, x2, x3, x4), gn(x5);
}
template <class T>
inline void print(T first) {
  if (first < 0) {
    putchar('-');
    return print(-first);
  }
  if (first < 10) {
    putchar('0' + first);
    return;
  }
  print(first / 10);
  putchar(first % 10 + '0');
}
template <class T>
inline void println(T first) {
  print(first);
  putchar('\n');
}
template <class T>
inline void printsp(T first) {
  print(first);
  putchar(' ');
}
template <class T1, class T2>
inline void print(T1 x1, T2 x2) {
  printsp(x1), println(x2);
}
template <class T1, class T2, class T3>
inline void print(T1 x1, T2 x2, T3 x3) {
  printsp(x1), printsp(x2), println(x3);
}
template <class T1, class T2, class T3, class T4>
inline void print(T1 x1, T2 x2, T3 x3, T4 x4) {
  printsp(x1), printsp(x2), printsp(x3), println(x4);
}
template <class T1, class T2, class T3, class T4, class T5>
inline void print(T1 x1, T2 x2, T3 x3, T4 x4, T5 x5) {
  printsp(x1), printsp(x2), printsp(x3), printsp(x4), println(x5);
}
int power(int a, int b, int m, int ans = 1) {
  for (; b; b >>= 1, a = 1LL * a * a % m)
    if (b & 1) ans = 1LL * ans * a % m;
  return ans;
}
int p[110], a[110], s[110], b[110];
int main() {
  int n, k;
  gn(n, k);
  for (int i = 1; i <= n; i++) gn(a[i]);
  int no = 1;
  for (int i = 1; i <= n; i++) {
    gn(s[i]);
    p[i] = i;
    if (s[i] != i) no = 0;
  }
  if (no) return puts("NO");
  int na = 0x3f3f3f3f, nb = 0x3f3f3f3f;
  for (int j = 1; j <= k; j++) {
    for (int i = 1; i <= n; i++) b[i] = p[a[i]];
    int ok = 1;
    for (int i = 1; i <= n; i++) {
      p[i] = b[i];
      if (p[i] != s[i]) ok = 0;
    }
    if (ok) {
      na = j;
      break;
    }
  }
  for (int i = 1; i <= n; i++) p[i] = i;
  for (int j = 1; j <= k; j++) {
    for (int i = 1; i <= n; i++) b[a[i]] = p[i];
    int ok = 1;
    for (int i = 1; i <= n; i++) {
      p[i] = b[i];
      if (p[i] != s[i]) ok = 0;
    }
    if (ok) {
      nb = j;
      break;
    }
  }
  if (k == 1) {
    if (na == 1 || nb == 1)
      puts("YES");
    else
      puts("NO");
  } else {
    if (na == k || nb == k)
      puts("YES");
    else {
      if (na < k) {
        if (nb < k) {
          if (na == 1 && nb == 1)
            puts("NO");
          else {
            if (na == 1) {
              if (k & 1)
                puts("YES");
              else if ((k - nb) & 1)
                puts("NO");
              else
                puts("YES");
            } else if (nb == 1) {
              if (k & 1)
                puts("YES");
              else if ((k - na) & 1)
                puts("NO");
              else
                puts("YES");
            } else {
              if ((k - na) % 2 == 0 || (k - nb) % 2 == 0)
                puts("YES");
              else
                puts("NO");
            }
          }
        } else {
          if ((k - na) & 1)
            puts("NO");
          else
            puts("YES");
        }
      } else if (nb < k) {
        if ((k - nb) & 1)
          puts("NO");
        else
          puts("YES");
      } else
        puts("NO");
    }
  }
}
