C: Liberar correctamente la memoria de una matriz multidimensional

Digamos que tienes el siguiente código ANSI C que inicializa una matriz multidimensional:

int main()
{
      int i, m = 5, n = 20;
      int **a = malloc(m * sizeof(int *));

      //Initialize the arrays
      for (i = 0; i < m; i++) { 
          a[i]=malloc(n * sizeof(int));
      }

      //...do something with arrays

      //How do I free the **a ?

      return 0;
}

Después de usar el**a, ¿cómo lo libero correctamente de la memoria?

[Actualizar] (Solución)

Gracias a Tim's (y los demás)responder, Ahora puedo hacer una función para liberar memoria de mi matriz multidimensional:

void freeArray(int **a, int m) {
    int i;
    for (i = 0; i < m; ++i) {
        free(a[i]);
    }
    free(a);
}

Respuestas a la pregunta(5)

Su respuesta a la pregunta