This post is cosmetic. It adds nothing to Artes excellent and instructive answer (which I have voted for). I post it to illustrate visualization of the region (a parallelogram in this instance) and use same change of variables as Artes. I think SliceContourPlot3D is also a a nice way to visualize.
m = {{6, 5}, {3, 6}}; mi = Inverse[m]; mi3 = ArrayFlatten[{{mi, 0}, {0, 1}}]; f[x_, y_] := Times @@ (m.{x, y})^2; j = Abs[Det@D[m.{x, y}, {{x, y}}]]; cp = ContourPlot[ Evaluate@Table[m.{x, y} == k {9, 7}, {k, {1, -1}}], {x, -5, 5}, {y, -5, 5}, PlotLegends -> "Expressions"]; pp = ParametricPlot[mi.{u, v}, {u, -9, 9}, {v, -7, 7}, PlotStyle -> Yellow]; sh1 = Legended[Show[{cp, pp}], SwatchLegend[{Yellow}, {"Region D"}]]; reg = ParametricRegion[mi.{u, v}, {{u, -9, 9}, {v, -7, 7}}]; i1 = HoldForm[Integrate[a^2 b^2, {a, -9, 9}, {b, -7, 7}]/j]; i2 = HoldForm[Integrate[f[x, y], {x, y} \[Element] reg]]; p3 = Plot3D[f[x, y], {x, y} \[Element] reg, Mesh -> None, PlotStyle -> Opacity[0.2]]; reg3 = ParametricRegion[ mi3.{u, v, w}, {{u, -9, 9}, {v, -7, 7}, {w, 0, 1}}]; scp = SliceContourPlot3D[ z - f[x, y], {z == 0}, {x, y, z} \[Element] reg3, PlotPoints -> 100, Contours -> {0., -10, -100, -1000}]; sh2 = Show[p3, scp, ImageSize -> 300]; vr = ParametricRegion[ mi3.{u, v, w}, {{u, -9, 9}, {v, -7, 7}, {w, 0, f @@ (mi.{u, v})}}]; vol = Volume[vr]; TraditionalForm@ Grid[{{Row[{HoldForm@f[x, y], " = ", f[x, y], " = ", Expand[Times @@ (m.{x, y})]^2}], SpanFromLeft}, {sh1, sh2}, Row[{#, " = ", ReleaseHold@#}, BaseStyle -> {20}] & /@ {i1, i2}, {Row[{"Parametric region D: ", vr[[1]]}], Row[{"Volume of D = ", vol}]}}, Alignment -> Left, Frame -> All]

Integrateinstead ofIntegrateto get exact answer; correct typo iny-domain so it runs from-Infinityat lower end! $\endgroup$Integrateinstead ofNIntegrate(typo was from Mac's "helpful" auto-correct). $\endgroup$