#include<bits/stdc++.h>
#define INF 1e9
#define LLINF 1e18
#define inf 0x3f3f3f3f
#define ll long long
#define FILE1(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
#define FILE2(x) freopen(x".in","r",stdin),freopen(x".ans","w",stdout)
#define FILE3(x) freopen(x".in","r",stdin)
#define Mod 998244353
#define N 2505
#define M 2500
using namespace std;
int read(){
int x=0,f=1,ch=getchar();
for(;!isdigit(ch);ch=getchar()) f=(ch=='-')?-1:1;
for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
return x*f;
}
int add(int x,int y){return x+y>=Mod?x+y-Mod:x+y;}
int del(int x,int y){return add(x,Mod-y);}
int mul(int x,int y){return ((ll)x*y)%Mod;}
void Add(int &x,int y){x=add(x,y);}
void Del(int &x,int y){x=del(x,y);}
void Mul(int &x,int y){x=mul(x,y);}
int cid,T,n,m,ans;
map<vector<int>,bool>mp;
bool vis[N];
int c[N]={0,1,2,5,12,15,28,31,63},sum[N];
void dfs(vector<int>vec){
if(vec.size()==1){
for(int i=1;i<=vec[0];++i){
if(vis[i]) continue;
vis[i]=true,++ans;
}
return;
}
if(mp[vec]) return;
mp[vec]=true;
int mx=0;
for(int i=0;i<vec.size();++i){
if(vec[i]>mx){
mx=vec[i];vector<int>tmp;
for(int j=i+1;j<vec.size();++j) tmp.push_back(vec[j]);
if(vec[i]!=1) tmp.push_back(vec[i]-1);
dfs(tmp);
}
}
}
void solve(){
n=read(),m=read();mp.clear(),ans=0;
vector<int>vec;
for(int i=1;i<=n;++i) vec.push_back(read());
dfs(vec);
printf("%d\n",mp.size()+ans);
for(int i=1;i<=m;++i) vis[i]=false;
}
int main(){
FILE1("seal");
cid=read(),T=read();
for(int i=9;i<=M;++i) c[i]=add(add(c[i-1],c[i-1]),1);
for(int i=1;i<=n;++i) sum[i]=add(sum[i-1],c[i];)
while(T--) solve();
return 0;
}