code: def min_xor(a, b, c, d, w):
          
          m = (1 << (w - 1))
          while m != 0:
              if ((~a) & c & m) != 0:
                  temp = (a | m) & -m
                  if temp <= b:
                      a = temp
              elif (a & (~c) & m) != 0:
                  temp = (c | m) & -m
                  if temp <= d:
                      c = temp
              m >>= 1
          return a ^ c
docs: Lower bound of result of XORing 2-intervals.
  
          :param a: Lower bound of first interval
          :param b: Upper bound of first interval
          :param c: Lower bound of second interval
          :param d: Upper bound of second interval
          :param w: bit width
          :return: Lower bound of XORing 2-intervals