#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
ostream& operator<<(ostream& os, const pair<A, B>& p) {
  return os << '(' << p.first << ", " << p.second << ')';
}
const int inf = 0x3f3f3f3f;
const long long inf64 = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-8;
const double pi = acos(-1.0);
int p[111], q[111];
int n, k;
void init(vector<int>& v) {
  v.clear();
  for (int i = 0; i < n; i++) v.push_back(i);
}
void applyf(vector<int>& v) {
  vector<int> res(n);
  for (int i = 0; i < n; i++) res[i] = v[p[i]];
  v = res;
}
void applyb(vector<int>& v) {
  vector<int> res(n);
  for (int i = 0; i < n; i++) res[p[i]] = v[i];
  v = res;
}
bool check(vector<int>& v) {
  for (int i = 0; i < n; i++)
    if (v[i] != q[i]) return false;
  return true;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> p[i];
  for (int i = 0; i < n; i++) cin >> q[i];
  for (int i = 0; i < n; i++) {
    p[i]--;
    q[i]--;
  }
  bool ok = true;
  for (int i = 0; i < n; i++)
    if (i != q[i]) {
      ok = false;
      break;
    }
  if (ok) {
    puts("NO");
    return 0;
  }
  bool okf = false, okb = false;
  ;
  vector<int> t;
  init(t);
  applyf(t);
  if (check(t)) {
    okf = true;
  }
  init(t);
  applyb(t);
  for (int i = 0; i < n; i++)
    ;
  if (check(t)) {
    okb = true;
  }
  if (k == 1) {
    puts((okf || okb) ? "YES" : "NO");
    return 0;
  }
  if (okb && okf) {
    puts("NO");
    return 0;
  }
  ok = false;
  init(t);
  for (int i = 1; i <= k; i++) {
    applyf(t);
    if (check(t)) {
      if ((k - i) % 2 == 0) {
        puts("YES");
        return 0;
      }
      break;
    }
  }
  init(t);
  for (int i = 1; i <= k; i++) {
    applyb(t);
    if (check(t)) {
      if ((k - i) % 2 == 0) {
        puts("YES");
        return 0;
      }
      break;
    }
  }
  puts("NO");
  return 0;
}
