//Accepted 5596 KB 396 ms
//线段树求区间最小值
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
/**
* This is a documentation comment block
* 如果有一天你坚持不下去了,就想想你为什么走到这儿!
* @authr songt
*/
;
int n;
int a[imax_n];
struct node
{
int l,r;
int tmin;
}f[imax_n*];
int min(int a,int b)
{
return a<b?a:b;
}
void build(int t,int l,int r)
{
f[t].l=l;
f[t].r=r;
if (l==r)
{
f[t].tmin=a[l];
return ;
}
;
build(*t,l,mid);
build(*t+,mid+,r);
f[t].tmin=min(f[*t].tmin,f[*t+].tmin);
}
int query(int t,int l,int r)
{
if (f[t].l==l && f[t].r==r)
{
return f[t].tmin;
}
;
*t,l,r);
else
{
*t+,l,r);
else
*t,l,mid),query(*t+,mid+,r));
}
}
int Q;
int x,y;
void slove()
{
build(,,n);
;i<Q;i++)
{
scanf("%d%d",&x,&y);
printf(,x,y));
}
}
int main()
{
int T;
scanf("%d",&T);
;t<=T;t++)
{
scanf("%d%d",&n,&Q);
;i<=n;i++)
scanf("%d",&a[i]);
printf("Case %d:\n",t);
slove();
}
;
}