#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long INF = 1e18;
long long n, m, dp[108][108];
map<long long, long long> mp[108];
long long memo(long long l, long long r) {
  if (l > r) return 0;
  if (dp[l][r] != -1) return dp[l][r];
  long long k = 0;
  for (long long i = (0); i < (n); i++) {
    auto it = mp[i].lower_bound(l);
    if ((*it).second <= r) k++;
  }
  long long res = -INF;
  for (long long j = (l); j <= (r); j++) {
    long long cnt = 0;
    for (long long i = (0); i < (n); i++) {
      auto it = mp[i].lower_bound(j);
      if (l <= (*it).second && (*it).first <= r) cnt++;
    }
    res = max(res, memo(l, j - 1) + cnt * cnt + memo(j + 1, r));
  }
  return dp[l][r] = res;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (long long i = (0); i < (n); i++) {
    long long k;
    cin >> k;
    for (long long j = (0); j < (k); j++) {
      long long l, r;
      cin >> l >> r;
      mp[i][r] = l;
    }
  }
  memset(dp, -1, sizeof(dp));
  cout << (memo(1, m)) << endl;
  return 0;
}
