def call(b, e, m):
    with o = 1:
        with bit = 2 ^ 255:
            while gt(bit, 0):
                # A touch of loop unrolling for 20% efficiency gain
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & bit)), m)
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & div(bit, 2))), m)
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & div(bit, 4))), m)
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & div(bit, 8))), m)
                bit = div(bit, 16)
            return(o)
