#include <bits/stdc++.h>
#pragma GCC optimize("O2,unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,mmx,avx,avx2")
using namespace std;
const int MAXN = 1e2 + 5;
int dp[MAXN][MAXN];
set<int> s[MAXN];
set<int> t[MAXN];
int n, m;
int f(int l, int r) {
  if (r < l) {
    return 0;
  }
  if (dp[l][r] != 0) {
    return dp[l][r] - 1;
  }
  for (int k = l; k <= r; k++) {
    int c = 0;
    for (int i = 0; i < n; i++) {
      if (*s[i].upper_bound(l - 1) <= k && *prev(t[i].upper_bound(r), 1) >= k) {
        c++;
      }
    }
    dp[l][r] = max(dp[l][r], c * c + f(l, k - 1) + f(k + 1, r));
  }
  dp[l][r]++;
  return dp[l][r] - 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  std::cout << std::fixed << std::setprecision(20);
  ;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int k;
    cin >> k;
    for (int j = 0; j < k; j++) {
      int x, y;
      cin >> x >> y;
      s[i].insert(x);
      t[i].insert(y);
    }
    s[i].insert((1 << 30));
    t[i].insert(-1);
  }
  cout << f(1, m) << endl;
}
