#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define X first #define Y second #define pb push_back #define bit(x) (1 << (x)) #define bnum(x) (__builtin_popcount(x)) #define all(x) (x).begin(), (x).end() #define mset0(x) memset((x), 0, sizeof((x))) #define mset1(x) memset((x), -1, sizeof((x))) #define LET(x,a) __typeof(a) x(a) #define REP(it,v) for (LET(it,v.begin()); it != v.end(); it++) #define sz(x) ((int)(x.size())) #define PQ priority_queue #define sqr(x) ((x) * (x)) using namespace std; typedef long long LL; typedef pair pii; typedef vector vi; typedef vector vpii; template inline void chkmin(T &a, T b) { if (b < a) a = b; } template inline void chkmax(T &a, T b) { if (a < b) a = b; } const int MX = 25; const int MM = 1000005; int b[MX]; int rlt[MM]; int main() { int T, n, i, j, A; for (scanf("%d", &T); T--; ) { scanf("%d%d", &n, &A); mset1(rlt); for (i = 1; i <= n; i++) { scanf("%d", b + i); } sort(b + 1, b + n + 1); reverse(b + 1, b + n + 1); rlt[A] = 0; for (i = 1; i <= n; i++) { for (j = A; j >= 0; j--) if (rlt[j] >= 0) { int tp = j % b[i]; int &ans = rlt[tp]; if (ans == -1 || ans > rlt[j] + 1) ans = rlt[j] + 1; } } printf("%d\n", rlt[0]); } return 0; }