@immibis I decided to leave that out, as this question is about the validity of the negative index; the indirection is separate, although it's obviously related to the result, which is defined in the second quote. If adding information about the indirection would help the OP I'd be happy to add it, but I don't think it's necessary.
Since q points to an element of an array object of a valid size for your integral expression, it is semantically valid.
So your expression is the same as *(q-1) = 41;, so is syntactically valid.
The expression E1[E2] is identical (by definition) to *((E1)+(E2)).
What about the *?
When an expression that has integral type is added to or subtracted from a pointer, the result has the type of the pointer operand. If the pointer operand points to an element of an array object, and the array is large enough, the result points to an element offset from the original element such that the difference of the subscripts of the resulting and original array elements equals the integral expression.