It's not a question of precedence but one of parsing. WL does follow the traditional rules for order of operations in arithmetic. The FrontEnd parses the input and gives it to the Kernel for evaluation. To see how the FrontEnd interprets your input, wrap your expression in Hold and then in FullForm, then evaluate it:
In[172]:= FullForm[Hold[-1^2]]
Out[172]//FullForm= Hold[Times[-1,Power[1,2]]]
Use parentheses to coerce the interpretation into the form you want:
In[173]:= FullForm[Hold[(-1)^2]]
Out[173]//FullForm= Hold[Power[-1,2]]