#include using namespace std; using ll = long long; using pll = pair; #define drep(i, cc, n) for (ll i = (cc); i <= (n); ++i) #define rep(i, n) drep(i, 0, n - 1) #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second const ll MOD = 1000000007; const ll MOD2 = 998244353; const ll INF = 1LL << 60; const ll MAX_N = 2e5; ll pow_mod(ll x, ll n, ll mod){ ll ret = 1; while(n > 0){ if(n & 1) ret = (ret*x)%mod; x = x*x%mod; n >>=1; } return ret; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll n, k; cin >> n >> k; priority_queue, greater> PQ; rep(i, n){ ll L, R; cin >> L >> R; R--; PQ.push({L, 0}); PQ.push({R, 1}); } ll cnt = 0; ll ans = 1; while(!PQ.empty()){ ll y = PQ.top().se; PQ.pop(); if(y == 0){ ans = (ans * max(k-cnt, 0LL))%MOD2; cnt++; }else{ cnt--; } } cout << (pow_mod(k, n, MOD2)-ans+MOD2)%MOD2 << endl; }