#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int d[11],n,s,visit[50];
bool dfs(int num){
int i,j,wide;
if(num==n)return true;
int pos;
int minx = 100;
for(j=1;j<=s;j++){
// pos选取visit最小的点
if(minx>visit[j]){
pos = j;
minx = visit[j];
}
}
for(i=10;i>0;i--){
if(d[i]==0)continue;
// 如果需要放置的蛋糕块的边长i小于剩余高度s-visit[pos];而且pos+i-1不越界
if(s-visit[pos]>=i&&pos+i-1<=s){
wide = 0;
for(j=pos;j<pos+i;j++){
// if(visit[j]<=visit[pos]){
// wide++;
// continue;
// }
// break;
// 如果所有经过点的高度都小于等于pos的高度,否则退出循环
if(visit[j]>visit[pos])break;
wide++;
}
// 如果可以装下蛋糕块
if(wide==i){
// 蛋糕块数减一
d[i]--;
// 将经过点的visit值都加i
for(j=pos;j<pos+i;j++)
visit[j] += i;
// for(j=1;j<=s;j++)
// cout<<visit[j]<<" ";
// cout<<endl<<num<<endl;
// 递归
if(dfs(num+1))return true;
//回溯
d[i]++;
for(j=pos;j<pos+i;j++)
visit[j] -= i;
}
}
}
return false;
}
int main(){
int t,i,tmp,count,sum;
scanf("%d",&t);
while(t--){
scanf("%d%d",&s,&n);
memset(d,0,sizeof(d));
memset(visit,0,sizeof(visit));
count = 0;
sum = 0;
for(i=0;i<n;i++){
scanf("%d",&tmp);
if(tmp>s/2)count++;
d[tmp]++;
sum += tmp*tmp;
}
// 如果有两个或两个以上蛋糕块的边长大于蛋糕边长
// 或者如果蛋糕块的总面积不等于蛋糕总面积
if(count>1||s*s!=sum){
printf("HUTUTU!\n");
}
// for(i=0;i<=10;i++)
// cout<<d[i]<<endl;
else
if(dfs(0))printf("KHOOOOB!\n");
else printf("HUTUTU!\n");
}
return 0;
}