It behaves as expected; for historical reasons M{#} means 'M with any arguments or indices, regardless of position'. M^{#} or M_{#} is interpreted in the same way. It's used a lot to declare \delta{#}::KroneckerDelta, in which case you really need it to mean 'both upper and lower indices'. 
Perhaps this historical choice was not a particularly good one, but I'm reluctant to change it now. I could potentially make M^{#} and M_{#} mean what you thought they would mean, because that should not clash with existing notebooks. Let me think this through a bit more.
For the time being, your only options are to either declare M^{A B}::AntiSymmetric explicitly (in which case you have to repeat it for any number of indices that you need) or accept that it behaves as in your example.