#include #define syosu(x) fixed< P; typedef pair pdd; typedef pair pll; typedef vector vi; typedef vector vvi; typedef vector vd; typedef vector vvd; typedef vector vl; typedef vector vvl; typedef vector vs; typedef vector

vp; typedef vector vvp; typedef vector vpll; typedef pair pip; typedef vector vip; const int inf=1<<30; const ll INF=1ll<<60; const double pi=acos(-1); const double eps=1e-9; const ll mod=1e9+7; const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0}; class Segment_Tree{ private: int n; vi date; int Rec(int a,int b,int k,int l,int r){ if(r<=a||b<=l) return 0; if(a<=l&&r<=b) return date[k]; int m=(l+r)/2; return Rec(a,b,k*2+1,l,m)+Rec(a,b,k*2+2,m,r); } public: Segment_Tree(int n_){ n=1; while(n0){ k=(k-1)/2; date[k]=date[k*2+1]+date[k*2+2]; } } int Query(int a,int b){ return Rec(a,b,0,0,n); } int Open(int k){return date[k+n-1];} }; ll n,m; vi a; vp b; int main(){ cin>>n>>m; a=vi(m,-1); Segment_Tree st(m); for(int i=0;i>A>>B; if(A>B) swap(A,B); a[A]=B; b.push_back({A,0}); b.push_back({B,1}); } sort(b.begin(),b.end()); ll res=0,t=0; for(int i=0;i<2*n;i++){ if(b[i].second) t++; else res+=t; } for(int i=0;i