Yes, at the very least `range(1, other).fold(m1, |acc, _| acc * *self)` to avoid cloning to `m2`, or even `range(0, other).fold(One::one(), |acc, _| acc * *self)` to avoid both clones. (They should be implemented without clones when you convert it to exponentiation by squaring.)