#include #pragma GCC optimize("Ofast") using namespace std; using std::cout; using std::cin; using std::endl; using ll=long long; using ld=long double; ll ILL=2167167167167167167; const int INF=2100000000; const int mod=998244353; #define rep(i,a,b) for (ll i=a;i using _pq = priority_queue, greater>; template ll LB(vector &v,T a){return lower_bound(v.begin(),v.end(),a)-v.begin();} template ll UB(vector &v,T a){return upper_bound(v.begin(),v.end(),a)-v.begin();} template bool chmin(T &a,const T &b){if(a>b){a=b;return 1;}else return 0;} template bool chmax(T &a,const T &b){if(a void So(vector &v) {sort(v.begin(),v.end());} template void Sore(vector &v) {sort(v.begin(),v.end(),[](T x,T y){return x>y;});} void yneos(bool a){if(a) cout<<"Yes\n"; else cout<<"No\n";} template void vec_out(vector &p){for(int i=0;i<(int)(p.size());i++){if(i) cout<<" ";cout< T vec_min(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmin(ans,x);return ans;} template T vec_max(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmax(ans,x);return ans;} template T vec_sum(vector &a){assert(!a.empty());T ans=a[0]-a[0];for(auto &x:a) ans+=x;return ans;} namespace po167{ //LCP vec[0,n) and vec[i,n) //for all i //O(vec.size()) template std::vector Z_algo(std::vector &vec){ int n=vec.size(); int ind=1,j=0,k; std::vector ans(n,0); ans[0]=n; while(ind Z_algo(std::string &vec){ int n=vec.size(); int ind=1,j=0,k; std::vector ans(n,0); ans[0]=n; while(ind>t; rep(i,0,t) solve(); } void solve(){ int N,K; cin>>N>>K; vector A(N),B(N); rep(i,0,N) cin>>A[i]; rep(i,0,N) cin>>B[i]; auto C=A,D=B; So(C),So(D); if(C!=D){ cout<<"No\n"; return; } if(A==B){ cout<<"Yes\n"; return; } if(K>N){ cout<<"No\n"; return; } if(K==N){ reverse(all(A)); yneos(A==B); return; } if(K!=N-1){ cout<<"Yes\n"; return; } vector p; rep(i,0,N) p.push_back(B[i]); p.push_back(-1); rep(i,0,N*2) p.push_back(A[i%N]); auto Z=Z_algo(p); rep(i,0,N){ if(Z[i+1+N]==N){ cout<<"Yes\n"; return; } } cout<<"No\n"; }