#include <iostream>
#include <cstring>
using namespace std;
// Author: Tanky Woo
// www.wutianqi.com
const int _max = 10001;
// c1是保存各项质量砝码可以组合的数目
// c2是中间量,保存每一次的情况
int c1[_max], c2[_max];
int main()
{
int nNum; //
int n;
int T;
cin>>T;
while(T--)
{
cin >> nNum >>n;
int val[1005],num[1005];
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for(int i=0;i<n;i++)
{
cin>>val[i]>>num[i];
}
for(int i=0;i<=nNum&&i<=num[0]*val[0];i+=val[0]) // ---- ①
{
c1[i] = 1;
c2[i] = 0;
}
for(int i=1; i<n; i++) // ----- ②
{
for(int j=0; j<=nNum; ++j) // ----- ③
{
for(int k=0; k+j<=nNum&&k<=num[i]*val[i]; k+=val[i]) // ---- ④
{
//cout<<j<<k<<j+k<<endl;
c2[j+k] += c1[j];
}
}
for(int j=0; j<=nNum; ++j) // ---- ⑤
{
c1[j] = c2[j];
c2[j] = 0;
}
}
cout << c1[nNum] << endl;
}
return 0;
}