#include <bits/stdc++.h>
long long MAX = 100000000000;
long long MIN = -100000000000;
long long MOD = 1000000007;
long long longlongmax = 9223372036854775807LL;
long long maxormin(long long a, long long b, long long flag) {
  return flag == 1 ? (a > b ? a : b) : (a < b ? a : b);
}
long long overflowcheck(long long a) {
  if (a == 1) {
    return 0;
  } else {
    long long temp = a;
    long long power = 1;
    while (longlongmax / temp > a) {
      temp *= a;
      power++;
    }
    return power + 1;
  }
}
long long merge(long long A[], long long B[], long long left, long long mid,
                long long right) {
  long long count = 0;
  long long n1 = mid - left + 1;
  long long n2 = right - mid;
  long long LA[n1], LB[n1], RA[n1], RB[n2];
  for (long long n = 0; n < n1; n++) {
    LA[n] = A[n + left];
    LB[n] = B[n + left];
  }
  for (long long n = 0; n < n2; n++) {
    RA[n] = A[n + mid + 1];
    RB[n] = B[n + mid + 1];
  }
  long long i = 0, j = 0, k = left;
  while (i < n1 && j < n2) {
    if (LA[i] < RA[j]) {
      A[k] = LA[i];
      B[k] = LB[i];
      i++;
    } else {
      A[k] = RA[j];
      B[k] = RB[j];
      count += n1 - i;
      j++;
    }
    k++;
  }
  while (i < n1) {
    A[k] = LA[i];
    B[k] = LB[i];
    i++;
    k++;
  }
  while (j < n2) {
    A[k] = RA[j];
    B[k] = RB[j];
    j++;
    k++;
  }
  return count;
}
long long mergesort(long long A[], long long B[], long long left,
                    long long right) {
  long long total = 0;
  if (left < right) {
    long long mid = (right - left) / 2 + left;
    total += mergesort(A, B, left, mid);
    total += mergesort(A, B, mid + 1, right);
    total += merge(A, B, left, mid, right);
  }
  return total;
}
long long max[1000];
int main(int argc, char const *argv[]) {
  long long T = 1;
  for (long long t = 0; t < T; t++) {
    long long N, H, M;
    scanf("%lld %lld %lld", &N, &H, &M);
    long long L[M], X[M], R[M];
    for (long long n = 0; n < N; n++) {
      max[n + 1] = H;
    }
    long long profit = 0;
    for (long long n = 0; n < M; n++) {
      scanf("%lld %lld %lld", &L[n], &R[n], &X[n]);
      for (long long i = L[n]; i <= R[n]; i++) {
        max[i] = maxormin(X[n], max[i], 0);
      }
    }
    for (long long n = 0; n < N; n++) {
      profit += max[n + 1] * max[n + 1];
    }
    printf("%lld\n", profit);
  }
  return 0;
}
