bi2de is not documented as having any such limitation, and there is an example in the documentation showing a result over 500. But if you were storing the result in a uint8 location in an array then the result would "saturate" at 255 because uint8 cannot store numbers larger than that.
I do not have bi2de() to test with.
A different way of doing things is
bin2dec(char(M+'0'))
which would return the full 19584 for M