#include <bits/stdc++.h>
using namespace std;
long long mpow(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = res * a % 998244353;
    a = a * a % 998244353;
    b >>= 1;
  }
  return res;
}
long long f[200010];
long long nck(int n, int k) {
  return f[n] * mpow(f[k], 998244353 - 2) % 998244353 *
         mpow(f[n - k], 998244353 - 2) % 998244353;
}
int n, k, h[200010];
vector<int> d;
int main() {
  cin >> n >> k;
  if (k == 1) {
    cout << 0 << '\n';
    return 0;
  }
  for (int i = 0; i < n; i++) {
    cin >> h[i];
    if (i == 0 || h[i] != h[i - 1]) {
      d.push_back(h[i]);
    }
  }
  f[0] = 1;
  for (int i = 1; i < 200010; i++) f[i] = f[i - 1] * i % 998244353;
  if (d.size() > 1 && d.back() == d[0]) d.pop_back();
  int m = d.size();
  if (m == 1) {
    cout << 0 << '\n';
    return 0;
  }
  long long num = mpow(k, m);
  for (int i = 0; i <= m; i += 2) {
    long long x = nck(m, i) * nck(i, i / 2) % 998244353;
    x = x * mpow(k - 2, m - i) % 998244353;
    num -= x;
    if (num < 0) num += 998244353;
  }
  num = num * mpow(2, 998244353 - 2) % 998244353;
  num = num * mpow(k, n - m) % 998244353;
  cout << num << '\n';
}
