#include <iostream> #include <cstdio> #include <algorithm> #include <string> using namespace std; int text[1000000], pattern[10000]; int nextTable[10000]; void getNextTable(int m){ int j = 0; nextTable[j] = -1; int i = nextTable[j]; while(j < m){ if(i == -1 || pattern[i] == pattern[j]){ i++; j++; nextTable[j] = i; }else{ i = nextTable[i]; } } } int KMP(int n, int m){ getNextTable(m); int i = 0; int j = 0; while(i < n && j < m){ if(j == -1 || text[i] == pattern[j]){ i++; j++; }else{ j = nextTable[j]; } } if(j == m){ return i - j + 1; }else{ return -1; } } int main(){ int t, m, n, index, ans; bool flag; cin >> t; while(t--){ //cin >> n >> m; scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ //cin >> a[i]; scanf("%d", &text[i]); } for(int j = 0; j < m; j++){ //cin >> b[j]; scanf("%d", &pattern[j]); } // flag = false; // index = 0; // for(int k = 0; k < n; k++){ // if(a[k] == b[0] && flag == false){ // index = k; // //printf("yes k = %d\n", k); // int l; // for(l = 1; l < m; l++){ // if(a[k+l] != b[l]) { // //printf("no %d %d %d\n", k, l, b[l]); // break; // }else if(l == m-1){ // flag = true; // //printf("change %d\n",k); // } // } // //printf("!!!\n"); // } // if(k + m > n || flag == true) break; // } // if(flag == true) ans = index+1; // else ans = -1; printf("%d\n", KMP(n,m)); } return 0; }