#include <bits/stdc++.h>
using namespace std;
long long qp(long long a, long long b) {
  long long r = 1;
  do
    if (b & 1) r = (((r * a) + 998244353) % 998244353);
  while (a = (((a * a) + 998244353) % 998244353), b >>= 1);
  return r;
}
long long d1[200001], d2[200001];
long long a[2][200001];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long n, m;
  cin >> n >> m;
  for (int i = 0; i != n; ++i) cin >> a[i % 2][i / 2];
  d1[0] = 0;
  d1[1] = m - 1;
  d2[0] = 1;
  d2[1] = m - 2;
  for (int i = 2; i <= n; ++i) {
    if (i % 2) {
      d1[i] =
          (((d1[i / 2] * d1[i / 2] +
             (m - 1) * (((d2[i / 2] * d2[i / 2]) + 998244353) % 998244353)) +
            998244353) %
           998244353);
      d2[i] =
          (((2 * d1[i / 2] * d2[i / 2] +
             (m - 2) * (((d2[i / 2] * d2[i / 2]) + 998244353) % 998244353)) +
            998244353) %
           998244353);
    } else {
      d1[i] = ((((m - 1) * d2[i - 1]) + 998244353) % 998244353);
      d2[i] = (((d1[i - 1] + (m - 2) * d2[i - 1]) + 998244353) % 998244353);
    }
  }
  long long ans = 1;
  for (int o = 0; o != 2; ++o) {
    int l = 0, r = n / 2 + (o ? 0 : n % 2) - 1, cl = 0, cr = 0;
    while (a[o][l] == -1 && l <= r) ++l, ++cl;
    if (l > r) {
      if (l)
        ans = (((ans * (((m * qp(m - 1, l - 1)) + 998244353) % 998244353)) +
                998244353) %
               998244353);
      continue;
    }
    while (a[o][r] == -1) --r, ++cr;
    ans = (((ans * (((qp(m - 1, cl)) + 998244353) % 998244353)) + 998244353) %
           998244353);
    ans = (((ans * (((qp(m - 1, cr)) + 998244353) % 998244353)) + 998244353) %
           998244353);
    int c = 0, p = a[o][l];
    for (int i = l + 1; i <= r; ++i) {
      int w = a[o][i];
      if (w > 0) {
        ans = (((ans * (w == p ? d1 : d2)[c]) + 998244353) % 998244353);
        c = 0;
        p = w;
      } else
        c++;
    }
  }
  cout << ans << endl;
  return 0;
}
