//#pragma GCC target ("avx2") //#pragma GCC optimize("O3") //#pragma GCC optimize("unroll-loops") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using ld = long double; using H = pair; using P = pair; using vi = vector; using vl = vector; #define all(a) (a).begin(),(a).end() #define fs first #define sc second #define xx first #define yy second.first #define zz second.second #define Q(i,j,k) mkp((i),mkp((j),(k))) #define rng(i,s,n) for(int i = (s) ; i < (n) ; i++) #define rep(i,n) rng(i, 0, (n)) #define mkp make_pair #define vec vector #define pb emplace_back #define siz(a) int((a).size()) #define crdcomp(b) sort(all((b)));(b).erase(unique(all((b))),(b).end()) #define getidx(b,i) (lower_bound(all((b)),(i))-(b).begin()) #define ssp(i,n) (i==(ll)(n)-1?"\n":" ") #define ctoi(c) (int)((c)-'0') #define itoc(c) (char)((c)+'0') #define cyes printf("Yes\n") #define cno printf("No\n") #define cdf(n) for(int __quetimes=(n);__quetimes>0;__quetimes--) #define gcj printf("Case #%lld: ",__quetimes+1) #define readv(a,n) (a).resize((n),0);rep(i,(n)) (a)[i]=read() #define found(a,x) (a.find(x)!=a.end()) constexpr ll mod = (ll)1e9 + 7; constexpr ll Mod = 998244353; constexpr ld EPS = 1e-10; constexpr ll inf = (ll)3 * 1e18; constexpr int Inf = 1e9; constexpr int dx[] = { -1,1,0,0 }, dy[] = { 0,0,-1,1 }; templatebool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; } templatebool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; } ll read() { ll u, k = scanf("%lld", &u); return u; } string reads() { string s; cin >> s; return s; } bool ina(H t, int h, int w) { return 0 <= t.fs && t.fs < h && 0 <= t.sc && t.sc < w; } bool ina(int t, int l, int r) { return l <= t && t < r; } ll gcd(ll i, ll j) { return j ? gcd(j, i % j) : i; } template void fin(T x) { cout << x << endl; exit(0); } //-------------------------------------------------------------- class RH { static long long b1, b2; static long long m1, m2; vectorh1, h2; static vectorp1, p2; public: static void init(int size) { p1.assign(size + 1, 1); p2.assign(size + 1, 1); for (int i = 0; i < size; i++) { p1[i + 1] = p1[i] * b1 % m1; p2[i + 1] = p2[i] * b2 % m2; } } RH() { if (p1.empty()) init(100005); } RH(const vector& s) { if (p1.empty()) init(100005); h1.assign(s.size() + 1, 0); h2.assign(s.size() + 1, 0); for (int i = 0; i < s.size(); i++) { h1[i + 1] = (h1[i] + s[i]) * b1 % m1; h2[i + 1] = (h2[i] + s[i]) * b2 % m2; } } H get(int l, int r) { int t1 = ((h1[r] - h1[l] * p1[r - l]) % m1 + m1) % m1; int t2 = ((h2[r] - h2[l] * p2[r - l]) % m2 + m2) % m2; return H{ t1,t2 }; }//[l,r) static H connect(H l, H r, int r_len) { return H((l.fs * p1[r_len] + r.fs % m1) % m1, (l.sc * p2[r_len] + r.sc % m2) % m2); } static H ch(vector s) { return RH(s).get(0, s.size()); } }; long long RH::b1 = 1007, RH::b2 = 1009, RH::m1 = 1e9 + 7, RH::m2 = 1e9 + 9; vectorRH::p1, RH::p2; signed main() { int n, k; cin >> n >> k; vi a(n), b(n); rep(i, n) cin >> a[i]; rep(i, n) cin >> b[i]; if (k == 1) { rep(i, n) if (a[i] != b[i]) fin("No"); cyes; } else if (k < n - 1) { sort(all(a)); sort(all(b)); rep(i, n) if (a[i] != b[i]) fin("No"); cyes; } else if (k == n - 1) { vi c = a, d = b; sort(all(c)); sort(all(d)); rep(i, n) if (c[i] != d[i]) { fin("No"); } b.resize(2 * n); rep(i, n) b[i + n] = b[i]; RH a2(a), b2(b); rep(i, n) { if (b2.get(i, i + n) == a2.get(0, n)) { bool flag = false; for (int j = 0; j < n; j++) { if (a[j] != b[i + j]) flag = true; } if (flag) { cyes; return 0; } } } cno; } else { rep(i, n) { if (a[i] != b[i]) goto loop; } fin("Yes"); loop:; if (k > n) fin("No"); reverse(all(a)); rep(i, n) { if (a[i] != b[i]) fin("No"); } } }