/*DM NA*/
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
#define task "name"
#define ii pair<ll, ll>
#define fi first
#define se second
#define pb push_back
#define em emplace
#define all(x) (x).begin(), (x).end()
#define sall(x) sort(all(x))
#define rall(x) reverse(all(x))
#define testcase \
int tc; \
cin >> tc; \
while (tc--) \
solve();
ll inline gcd(ll a, ll b) { return !b ? abs(a) : gcd(b, a % b); }
ll inline lcm(ll a, ll b) { return (a / gcd(a, b) * b); }
///============================================================================
#define BIT(i, mask) ((mask >> (i - 1)) & 1)
#define DAOBIT(i, mask) ((mask ^ (1 << i - 1)))
#define OFFBIT(i, mask) ((mask & ~(1 << (i - 1))))
#define ONBIT(i, mask) ((mask | (1 << (i - 1))))
///============================================================================
const ll mod = 998244353;
const ll inf = (ll)1e18 + 10;
const ll nmax = 1e6+5;
///============================================================================
using namespace std;
///============================================================================
ll nhan(ll a, ll b, ll M)
{
if (b == 0)
return 0;
ll t = nhan(a, b / 2, M) % M;
if (b & 1)
return ((t + t) % M + a % M) % M;
else
return (t + t) % M;
}
ll mu(ll a, ll b, ll M)
{
if (b == 0)
return 1LL;
ll half = mu(a, b / 2LL, M) % M;
half = nhan(half, half, M);
if (b & 1)
return nhan(half, a, M);
else
return half;
}
struct matrix {
ll a[12][12];
ll hang, cot;
};
matrix nhan(matrix a, matrix b)
{
matrix ans;
ans.hang = a.hang;
ans.cot = b.cot;
for (int i = 1; i <= ans.hang; i++)
for (int j = 1; j <= ans.cot; j++)
{
ans.a[i][j] = 0;
for (int k = 1; k <= a.cot; k++)
ans.a[i][j] = (ans.a[i][j] + (a.a[i][k] % mod) * (b.a[k][j] % mod) % mod + mod) % mod;
///ans.a[i][j] = (ans.a[i][j] + nhan(a.a[i][k], b.a[k][j], mod)) % mod;
}
return ans;
}
matrix mu(matrix a, ll b)
{
if (b == 1) return a;
matrix ans = mu(a, b / 2LL);
ans = nhan(ans, ans);
if (b & 1) return nhan(ans, a);
else return ans;
}
ll n, m;
map<ll, bool> a;
ll dp[nmax], mx;
matrix b, c;
///============================================================================
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
ll x;
cin >> x;
a[x] = 1;
}
if(n <= 200000)
{
dp[0] = 1;
for(int i = 2; i <= n; i++)
{
if(a[i])
dp[i] = 0;
else{
dp[i] = (dp[i - 2] + dp[i - 3] * (i >= 3)) % mod;
}
///cout << i << ' ' << dp[i] << '\n';
}
cout << dp[n];
return 0;
}
if(m == 0)
{
b.hang = 3, b.cot = 3;
b.a[1][2] = b.a[1][3] = 1;
b.a[2][1] = b.a[3][2] = 1;
matrix ans = mu(b, n);
matrix c;
c.hang = 3, c.cot = 1;
c.a[1][1] = c.a[3][1] = 1;
matrix res = nhan(c, ans);
/*for(int i = 1; i <= 3; i++)
{
for(int j = 1; j <= 3; j++)
{
cout << ans.a[i][j] << ' ';
}
cout << '\n';
}*/
cout << res.a[1][1];
}
}
LypETSBOQSovCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHRhc2sgIm5hbWUiCiNkZWZpbmUgaWkgcGFpcjxsbCwgbGw+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBlbSBlbXBsYWNlCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBzYWxsKHgpIHNvcnQoYWxsKHgpKQojZGVmaW5lIHJhbGwoeCkgcmV2ZXJzZShhbGwoeCkpCiNkZWZpbmUgdGVzdGNhc2UgXAogICAgaW50IHRjOyAgICAgIFwKICAgIGNpbiA+PiB0YzsgICBcCiAgICB3aGlsZSAodGMtLSkgXAogICAgICAgIHNvbHZlKCk7CmxsIGlubGluZSBnY2QobGwgYSwgbGwgYikgeyByZXR1cm4gIWIgPyBhYnMoYSkgOiBnY2QoYiwgYSAlIGIpOyB9CmxsIGlubGluZSBsY20obGwgYSwgbGwgYikgeyByZXR1cm4gKGEgLyBnY2QoYSwgYikgKiBiKTsgfQovLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiNkZWZpbmUgQklUKGksIG1hc2spICgobWFzayA+PiAoaSAtIDEpKSAmIDEpCiNkZWZpbmUgREFPQklUKGksIG1hc2spICgobWFzayBeICgxIDw8IGkgLSAxKSkpCiNkZWZpbmUgT0ZGQklUKGksIG1hc2spICgobWFzayAmIH4oMSA8PCAoaSAtIDEpKSkpCiNkZWZpbmUgT05CSVQoaSwgbWFzaykgKChtYXNrIHwgKDEgPDwgKGkgLSAxKSkpKQovLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmNvbnN0IGxsIG1vZCA9IDk5ODI0NDM1MzsKY29uc3QgbGwgaW5mID0gKGxsKTFlMTggKyAxMDsKY29uc3QgbGwgbm1heCA9IDFlNis1OwovLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KbGwgbmhhbihsbCBhLCBsbCBiLCBsbCBNKQp7CiAgICBpZiAoYiA9PSAwKQogICAgICAgIHJldHVybiAwOwogICAgbGwgdCA9IG5oYW4oYSwgYiAvIDIsIE0pICUgTTsKICAgIGlmIChiICYgMSkKICAgICAgICByZXR1cm4gKCh0ICsgdCkgJSBNICsgYSAlIE0pICUgTTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gKHQgKyB0KSAlIE07Cn0KbGwgbXUobGwgYSwgbGwgYiwgbGwgTSkKewogICAgaWYgKGIgPT0gMCkKICAgICAgICByZXR1cm4gMUxMOwogICAgbGwgaGFsZiA9IG11KGEsIGIgLyAyTEwsIE0pICUgTTsKICAgIGhhbGYgPSBuaGFuKGhhbGYsIGhhbGYsIE0pOwogICAgaWYgKGIgJiAxKQogICAgICAgIHJldHVybiBuaGFuKGhhbGYsIGEsIE0pOwogICAgZWxzZQogICAgICAgIHJldHVybiBoYWxmOwp9CnN0cnVjdCBtYXRyaXggewogICAgbGwgYVsxMl1bMTJdOwogICAgbGwgaGFuZywgY290Owp9OwptYXRyaXggbmhhbihtYXRyaXggYSwgbWF0cml4IGIpCnsKICAgIG1hdHJpeCBhbnM7CiAgICBhbnMuaGFuZyA9IGEuaGFuZzsKICAgIGFucy5jb3QgPSBiLmNvdDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGFucy5oYW5nOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gYW5zLmNvdDsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgYW5zLmFbaV1bal0gPSAwOwogICAgICAgICAgICBmb3IgKGludCBrID0gMTsgayA8PSBhLmNvdDsgaysrKQogICAgICAgICAgICAgICAgYW5zLmFbaV1bal0gPSAoYW5zLmFbaV1bal0gKyAoYS5hW2ldW2tdICUgbW9kKSAqIChiLmFba11bal0gJSBtb2QpICUgbW9kICsgbW9kKSAlIG1vZDsKICAgICAgICAgICAgLy8vYW5zLmFbaV1bal0gPSAoYW5zLmFbaV1bal0gKyBuaGFuKGEuYVtpXVtrXSwgYi5hW2tdW2pdLCBtb2QpKSAlIG1vZDsKICAgICAgICB9CiAgICByZXR1cm4gYW5zOwp9Cm1hdHJpeCBtdShtYXRyaXggYSwgbGwgYikKewogICAgaWYgKGIgPT0gMSkgcmV0dXJuIGE7CiAgICBtYXRyaXggYW5zID0gbXUoYSwgYiAvIDJMTCk7CiAgICBhbnMgPSBuaGFuKGFucywgYW5zKTsKICAgIGlmIChiICYgMSkgcmV0dXJuIG5oYW4oYW5zLCBhKTsKICAgIGVsc2UgcmV0dXJuIGFuczsKfQpsbCBuLCBtOwptYXA8bGwsIGJvb2w+IGE7CmxsIGRwW25tYXhdLCBteDsKbWF0cml4IGIsIGM7Ci8vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KaW50IG1haW4oKQp7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKykKICAgIHsKICAgICAgICBsbCB4OwogICAgICAgIGNpbiA+PiB4OwogICAgICAgIGFbeF0gPSAxOwogICAgfQogICAgaWYobiA8PSAyMDAwMDApCiAgICB7CiAgICAgICAgZHBbMF0gPSAxOwogICAgICAgIGZvcihpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoYVtpXSkKICAgICAgICAgICAgICAgIGRwW2ldID0gMDsKICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIGRwW2ldID0gKGRwW2kgLSAyXSArIGRwW2kgLSAzXSAqIChpID49IDMpKSAlIG1vZDsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLy9jb3V0IDw8IGkgPDwgJyAnIDw8IGRwW2ldIDw8ICdcbic7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZHBbbl07CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZihtID09IDApCiAgICB7CiAgICAgICAgYi5oYW5nID0gMywgYi5jb3QgPSAzOwogICAgICAgIGIuYVsxXVsyXSA9IGIuYVsxXVszXSA9IDE7CiAgICAgICAgYi5hWzJdWzFdID0gYi5hWzNdWzJdID0gMTsKICAgICAgICBtYXRyaXggYW5zID0gbXUoYiwgbik7CiAgICAgICAgbWF0cml4IGM7CiAgICAgICAgYy5oYW5nID0gMywgYy5jb3QgPSAxOwogICAgICAgIGMuYVsxXVsxXSA9IGMuYVszXVsxXSA9IDE7CiAgICAgICAgbWF0cml4IHJlcyA9IG5oYW4oYywgYW5zKTsKICAgICAgICAvKmZvcihpbnQgaSA9IDE7IGkgPD0gMzsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKGludCBqID0gMTsgaiA8PSAzOyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgYW5zLmFbaV1bal0gPDwgJyAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQgPDwgJ1xuJzsKICAgICAgICB9Ki8KICAgICAgICBjb3V0IDw8IHJlcy5hWzFdWzFdOwoKICAgIH0KCn0K