#include #include #include #include #include #include #include using namespace std; using mint=atcoder::modint998244353; long N; int M; int TO[2<<17]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>N>>M; mt19937_64 rng; vector >LR(M+M+1); LR[M+M]=make_pair(N,0uL); for(int i=0;i>l>>r; l--; auto h=rng(); LR[i+i]=make_pair(l,h); LR[i+i+1]=make_pair(r,h); } sort(LR.begin(),LR.end()); mapmp; mint prv=0; unsigned long H=0; for(auto[x,h]:LR) { mp[H]+=x-prv; prv=x; H^=h; } mint N0=mp[0uL]; mint ans=N0*N0+N0*(N-N0)/2; mp.erase(0uL); for(auto[h,v]:mp) { ans+=v*v/2; ans+=N0*v/2; ans+=v*(N-N0-v)/4; } ans*=mint(2).pow(M); cout<