#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
long long a_na_b_mod_c(long long a, long long b, long long c) {
  if (b == 0) return 1;
  long long t = a_na_b_mod_c(a, (b / 2), c) % c;
  if (b % 2 == 0)
    return (t * t) % c;
  else
    return (((t * t) % c) * (a % c)) % c;
}
long long ip(long long a) { return a_na_b_mod_c(a, mod - 2, mod); }
vector<long long> f(1, 1), fi;
long long nCk(long long n, long long k) {
  return (((f[n] * fi[k]) % mod) * fi[n - k]) % mod;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  long long k;
  cin >> n >> k;
  if (!k) {
    cout << "0\n";
    return 0;
  }
  for (int i = 1; i < n + 79; i++) f.push_back((f.back() * i) % mod);
  fi.resize(n + 79);
  for (int i = 0; i < n + 79; i++) fi[i] = ip(f[i]);
  vector<int> h(n);
  for (int i = 0; i < n; i++) {
    cin >> h[i];
  }
  h.push_back(h[0]);
  long long eq = 0;
  for (int i = 1; i <= n; i++) {
    if (h[i] == h[i - 1]) eq++;
  }
  long long dif = n - eq;
  if (!dif) {
    cout << "0\n";
    return 0;
  }
  long long all = 0;
  long long i2 = ip(2);
  long long p2 = a_na_b_mod_c(2, dif, mod);
  long long kp2 = 1;
  for (long long z = 0; z < dif; z++) {
    long long non_zero = dif - z;
    long long good = p2;
    long long zero = non_zero % 2 == 1 ? 0 : nCk(non_zero, non_zero >> 1);
    good = ((good - zero + mod) * i2) % mod;
    all += (((good * nCk(dif, z)) % mod) * kp2) % mod;
    all %= mod;
    p2 = (p2 * i2) % mod;
    kp2 = (kp2 * (k - 2)) % mod;
  }
  cout << (all * a_na_b_mod_c(k, eq, mod)) % mod << "\n";
  return 0;
}
