#include<cstdio>
#include<cstring>
int q[103], p[103], s[103], pp[103];
int n, k, a, b;
int main()
{
int i, j;
scanf("%d%d", &n, &k);
for(i = 1; i <= n; i++)
scanf("%d", &q[i]);
for(i = 1; i <= n; i++)
scanf("%d", &s[i]);
//求解操作1的周期
for(i = 1; i <= n; i++)
pp[i] = p[i] = i;
while(a <= k)
{
for(j = 1; j <= n && p[j] == s[j]; j++);
if(j == n+1) break;
for(j = 1; j <= n; j++)
pp[j] = p[q[j]];
for(j = 1; j <= n; j++)
p[j] = pp[j];
a++;
}
//求解操作2的周期
for(i = 1; i <= n; i++)
pp[i] = p[i] = i;
while(b <= k)
{
for(j = 1; j <= n && p[j] == s[j]; j++);
if(j == n+1) break;
for(j = 1; j <= n; j++)
pp[q[j]] = p[j];
for(j = 1; j <= n; j++)
p[j] = pp[j];
b++;
}
//对两边周期都为1进行特判
if(a == 1 && b == 1 && k == 1) puts("YES");
else if(a == 1 && b == 1) puts("NO");
else if(a == k+1 && b == k+1) puts("NO"); // 两边都走不到
else if(!a && !b) puts("NO"); //一开始的串就是目标(a == 0 && b == 0)
else if(((b+k+1)&1) || ((a+k+1)&1)) puts("YES"); //左右只要有一边可以到达
else puts("NO");
return 0;
}
/*
4 3
2 1 4 3
4 3 1 2
*/