It's not -- the value of $M here is the string "F[word]". Your print function reports the value of "$((M*1))", which is, in fact "2": inside the arithmetic _expression_ "M" is expanded to "F[word]" which is expanded to "2".
> # without changing M, it is now 3!!!!!!
Exactly, M does not change, it is still "F[word]". But since F[word] changes, the value of $((M*1)) does change to reflect the new value of F[word].
Instead of M=F[$W], I think you want to be doing M=${F[$W]}.