I personally find it easier to think of
#color(white)("XXX")(f * g)(x)# and #(f * g)(-1)#
as #f(g(x))# and #f(g(-1)# respectively
Given
#color(white)("XXX")f(color(blue)x)=color(blue)x^2-1#
then
after simply substituting #color(blue)(g(x))# for #x#
#color(white)("XXX")f(color(blue)(g(x)))=(color(blue)(g(x)))^2-1#
Now since we are also given that
#color(white)("XXX")color(blue)(g(color(magenta)x)=2color(magenta)x-3#
after substituting #color(blue)(2color(magenta)x-3)# for #color(blue)(g(x))# above
we get
#color(white)("XXX")f(color(blue)(g(color(magenta)x)))=(color(blue)(2color(magenta)x-3))^2-1#
Expanding (and dropping the color coding for a bit)
#color(white)("XXX")f(g(x))=4x^2-12x+8#
...or we could re-color code the variable #color(red)x# to make this appear as
#color(white)("XXX")f(g(color(red)(x)))=4color(red)x^2-12color(red)x+8#
Since we are asked for #(f * g)(color(red)(-1))#
which can be written as #f(g(color(red)(-1)))#
we can substitute #(color(red)(-1))# in place of #color(red)x# in our definition of #f(g(color(red)x))#
#color(white)("XXX")f(g(color(red)(-1)))=4 * (color(red)(-1))^2-12 * (color(red)(-1))+8#
#color(white)("XXXXXXXX")=4+12+8#
#color(white)("XXXXXXXX")=24#