#include<stdio.h>
#include<iostream>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string>
#include<algorithm>
#include<vector>
#include<sstream>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
const int SIZE=100005;
struct TT{
int aa,bb;
};
int arr[SIZE],tree[SIZE*3];
TT brr[SIZE*3];
map<int,int>MP;
int t,cases,test,n,q,i,a,b,val;
int func(int m,int n){
int i,t,asg=0;
for(i=brr[m].aa;i<=brr[m].bb;i++){
t=arr[i];
if(MP.find(t)==MP.end()) MP[t]=asg++;
}
for(i=brr[n].aa;i<=brr[n].bb;i++){
t=arr[i];
if(MP.find(t)==MP.end()) MP[t]=asg++;
}
t=MP.size();
MP.clear();
return t;
}
void find(int node,int low,int high){
int mid,add,left,right;
if(low==high){
tree[node]=1;
return;
}
left=node<<1;
right=left+1;
mid=(low+high)>>1;
brr[left]={low,mid};
brr[right]={mid+1,high};
brr[node]={low,high};
find(left,low,mid);
find(right,mid+1,high);
tree[node]=func(left,right);
}
int query(int node,int low,int high,int i,int j){
if(i>high || j<low) return 0;
if(low>=i && high<=j) return tree[node];
int left,right,mid,temp,temp2,add;
left=node<<1;
right=left+1;
mid=(low+high)>>1;
temp=query(left,low,mid,i,j);
temp2=query(right,mid+1,high,i,j);
add=max(temp,temp2);
return add;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
#endif
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++)
scanf("%d",&arr[i]);
find(1,1,n);
for(i=1;i<16;i++) printf("%d (%d %d) %d\n",i,brr[i].aa,brr[i].bb,tree[i]);
printf("Case %d:\n",++cases);
while(q--){
scanf("%d%d",&a,&b);
val=query(1,1,n,a,b);
printf("%d\n",val);
}
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGN0eXBlLmg+CiNpbmNsdWRlPHN0cmluZy5oPgojaW5jbHVkZTxzdGRsaWIuaD4KI2luY2x1ZGU8bWF0aC5oPgojaW5jbHVkZTxzdHJpbmc+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxzc3RyZWFtPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IFNJWkU9MTAwMDA1OwpzdHJ1Y3QgVFR7CiAgICBpbnQgYWEsYmI7Cn07CmludCBhcnJbU0laRV0sdHJlZVtTSVpFKjNdOwpUVCBicnJbU0laRSozXTsKbWFwPGludCxpbnQ+TVA7CmludCB0LGNhc2VzLHRlc3QsbixxLGksYSxiLHZhbDsKCmludCBmdW5jKGludCBtLGludCBuKXsKICAgIGludCBpLHQsYXNnPTA7CiAgICBmb3IoaT1icnJbbV0uYWE7aTw9YnJyW21dLmJiO2krKyl7CiAgICAgICAgdD1hcnJbaV07CiAgICAgICAgaWYoTVAuZmluZCh0KT09TVAuZW5kKCkpIE1QW3RdPWFzZysrOwogICAgfQogICAgZm9yKGk9YnJyW25dLmFhO2k8PWJycltuXS5iYjtpKyspewogICAgICAgIHQ9YXJyW2ldOwogICAgICAgIGlmKE1QLmZpbmQodCk9PU1QLmVuZCgpKSBNUFt0XT1hc2crKzsKICAgIH0KICAgIHQ9TVAuc2l6ZSgpOwogICAgTVAuY2xlYXIoKTsKICAgIHJldHVybiB0Owp9Cgp2b2lkIGZpbmQoaW50IG5vZGUsaW50IGxvdyxpbnQgaGlnaCl7CiAgICBpbnQgbWlkLGFkZCxsZWZ0LHJpZ2h0OwogICAgaWYobG93PT1oaWdoKXsKICAgICAgICB0cmVlW25vZGVdPTE7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbGVmdD1ub2RlPDwxOwogICAgcmlnaHQ9bGVmdCsxOwogICAgbWlkPShsb3craGlnaCk+PjE7CiAgICBicnJbbGVmdF09e2xvdyxtaWR9OwogICAgYnJyW3JpZ2h0XT17bWlkKzEsaGlnaH07CiAgICBicnJbbm9kZV09e2xvdyxoaWdofTsKICAgIGZpbmQobGVmdCxsb3csbWlkKTsKICAgIGZpbmQocmlnaHQsbWlkKzEsaGlnaCk7CiAgICB0cmVlW25vZGVdPWZ1bmMobGVmdCxyaWdodCk7Cn0KCmludCBxdWVyeShpbnQgbm9kZSxpbnQgbG93LGludCBoaWdoLGludCBpLGludCBqKXsKICAgIGlmKGk+aGlnaCB8fCBqPGxvdykgcmV0dXJuIDA7CiAgICBpZihsb3c+PWkgJiYgaGlnaDw9aikgcmV0dXJuIHRyZWVbbm9kZV07CiAgICBpbnQgbGVmdCxyaWdodCxtaWQsdGVtcCx0ZW1wMixhZGQ7CiAgICBsZWZ0PW5vZGU8PDE7CiAgICByaWdodD1sZWZ0KzE7CiAgICBtaWQ9KGxvdytoaWdoKT4+MTsKICAgIHRlbXA9cXVlcnkobGVmdCxsb3csbWlkLGksaik7CiAgICB0ZW1wMj1xdWVyeShyaWdodCxtaWQrMSxoaWdoLGksaik7CiAgICBhZGQ9bWF4KHRlbXAsdGVtcDIpOwogICAgcmV0dXJuIGFkZDsKfQoKaW50IG1haW4oKQp7CiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pOwogICAgLy9mcmVvcGVuKCJvdXRwdXQudHh0IiwidyIsc3Rkb3V0KTsKICAgICNlbmRpZgoKICAgIHNjYW5mKCIlZCIsJnQpOwogICAgd2hpbGUodC0tKXsKICAgICAgICBzY2FuZigiJWQlZCIsJm4sJnEpOwogICAgICAgIGZvcihpPTE7aTw9bjtpKyspCiAgICAgICAgICAgIHNjYW5mKCIlZCIsJmFycltpXSk7CiAgICAgICAgZmluZCgxLDEsbik7CiAgICAgICAgZm9yKGk9MTtpPDE2O2krKykgcHJpbnRmKCIlZCAoJWQgJWQpICVkXG4iLGksYnJyW2ldLmFhLGJycltpXS5iYix0cmVlW2ldKTsKICAgICAgICBwcmludGYoIkNhc2UgJWQ6XG4iLCsrY2FzZXMpOwogICAgICAgIHdoaWxlKHEtLSl7CiAgICAgICAgICAgIHNjYW5mKCIlZCVkIiwmYSwmYik7CiAgICAgICAgICAgIHZhbD1xdWVyeSgxLDEsbixhLGIpOwogICAgICAgICAgICBwcmludGYoIiVkXG4iLHZhbCk7CiAgICAgICAgfQoJfQogICAgcmV0dXJuIDA7Cn0K