#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,m;cin>>n>>m;map<int,vector<int>>adj;while(n--){intlen;cin>>len;vector<bool>present(len+5,false);for(inti=0;i<len;i++){intele;cin>>ele;// Reject elements greater than the length to avoid segfault.
if(ele<present.size()){present[ele]=true;}}intmissing_count=0;intu=-1,v=-1;for(inti=0;i<present.size();i++){if(!present[i]){missing_count++;}if(missing_count==1&&u==-1){u=i;}if(missing_count==2){v=i;break;}}adj[u].push_back(v);}for(auto&[u,vec]:adj){n=max(n,u);for(auto&child:vec){n=max(n,child);}}n++;vector<int>indp(n,-1),outdp(n,-1);for(inti=n-1;i>=0;i--){indp[i]=i;for(autochild:adj[i]){indp[i]=max(indp[i],indp[child]);}if(adj[i].size()==1){outdp[i]=i;}elseif(adj[i].size()>1){outdp[i]=max(outdp[i],indp[i]);}}intlim=*max_element(outdp.begin(),outdp.end());vector<int>f(n);for(inti=0;i<n;i++){f[i]=max(indp[i],lim);}autoget_sum=[&](intn){// Sum of all numbers from 1 to n.
return1LL*n*(n+1)/2;};longlongres=0;for(inti=0;i<=min(n-1,m);i++){res+=f[i];}if(m>=n){res+=get_sum(m)-get_sum(n-1);}cout<<res<<"\n";}intmain(){ios_base::sync_with_stdio(false);cin.tie(NULL);intt;cin>>t;while(t--){solve();}}