#include <bits/stdc++.h>
#pragma GCC target("avx")
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
using namespace std;
using namespace std;
const int mod = 998244353;
int n, m, x, a[4000005], ans, w[4000005], r[4000005], invn, mx, lenk;
int ksm(int a, int b) {
  int s = 1;
  while (b > 0) {
    if (b & 1) s = (long long)s * a % mod;
    a = (long long)a * a % mod, b >>= 1;
  }
  return s;
}
void pre(int &n) {
  int len = 0;
  while (1 << len < n) len++;
  n = 1 << len;
  int G = ksm(3, (mod - 1) / n);
  invn = ksm(n, mod - 2);
  w[0] = w[n] = 1;
  for (int i = 1; i < n; i++)
    w[i] = (long long)w[i - 1] * G % mod,
    r[i] = (r[i >> 1] >> 1) | ((i & 1) << (len - 1));
}
void fft(int *a, int all, int fl) {
  for (int i = 0; i < all; i++)
    if (i < r[i]) swap(a[i], a[r[i]]);
  int n = 2, m = 1, x = all / 2;
  for (; n <= all; m = n, n <<= 1, x >>= 1)
    for (int i = 0; i < all; i += n)
      for (int k = 0; k < m; k++) {
        int t = (long long)w[fl ? all - x * k : x * k] * a[i + m + k] % mod;
        a[i + m + k] = (a[i + k] + mod - t) % mod;
        a[i + k] = (a[i + k] + t) % mod;
      }
  if (fl)
    for (int i = 0; i < all; i++) a[i] = (long long)a[i] * invn % mod;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) scanf("%d", &x), a[x]++, mx = max(mx, x);
  lenk = n / 2 * mx + 1;
  pre(lenk);
  fft(a, lenk, 0);
  for (int i = 0; i < lenk; i++) a[i] = ksm(a[i], n / 2);
  fft(a, lenk, 1);
  for (int i = 0; i <= n / 2 * mx; i++)
    ans = (ans + (long long)a[i] * a[i] % mod) % mod;
  printf("%d\n", ans);
  return 0;
}
