//#pragma GCC optimize ("O3") //#pragma GCC target ("sse4") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("Ofast,unroll-loops") //#pragma GCC target("avx,avx2,fma") #include #include #include //#include #include //#include //#include //#include #include #include //#include //#include //#include #include #include using namespace std; #define FAST ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) //#include //#include //using namespace __gnu_pbds; #define int long long #define ll int #define all(a) a.begin(),a.end() #define rev(a) a.rbegin(),a.rend() //typedef tree, rb_tree_tag, tree_order_statistics_node_update> ordered_set; //less_equal for multiset #define ar array #define pb push_back #define fi(a,b) for(int i=a;i<(b);i++) #define fj(a,b) for(int j=a;j<(b);j++) #define fk(a,b) for(int k=a;k<(b);k++) const double pi=acosl(-1); void solve() { int n,m; cin>>n>>m; vector a(n); fi(0,n) { cin>>a[i]; } vector b(m); fi(0,m) { cin>>b[i]; } int ans=1e18; fi(0,n) { vector vis(m); fj(0,m) { if(a[i]==b[j]) vis[j]=1; } for(int moves=0;moves<=5001;moves++) { if(vis[(moves*n+i)%m]) { ans=min(ans,moves*n+i+1); } } } if(ans==1e18) ans=-1; cout<>tt; while(tt--) { solve(); } } //int dx[] = {+1,-1,+0,+0,-1,-1,+1,+1}; // Eight Directions //int dy[] = {+0,+0,+1,-1,+1,-1,-1,+1}; // Eight Directions //int dx[]= {-2,-2,-1,1,-1,1,2,2}; // Knight moves //int dy[]= {1,-1,-2,-2,2,2,-1,1}; // Knight moves // For (a^b)%mod, where b is large, replace b by b%(mod-1)..{because we solve this by introducing log ..do same for general cases} // a+b = (a|b)+(a&b) // a+b = 2*(a&b)+(a^b)