code: JSModule getDeepestCommonDependency(JSModule m1, JSModule m2) {
      int m1Depth = m1.getDepth();
      int m2Depth = m2.getDepth();
      // According our definition of depth, the result must have a strictly
      // smaller depth than either m1 or m2.
      for (int depth = Math.min(m1Depth, m2Depth) - 1; depth >= 0; depth--) {
        List<JSModule> modulesAtDepth = modulesByDepth.get(depth);
        // Look at the modules at this depth in reverse order, so that we use the
        // original ordering of the modules to break ties (later meaning deeper).
        for (int i = modulesAtDepth.size() - 1; i >= 0; i--) {
          JSModule m = modulesAtDepth.get(i);
          if (dependsOn(m1, m) && dependsOn(m2, m)) {
            return m;
          }
        }
      }
      return null;
    }
docs: Finds the deepest common dependency of two modules, not including the two
  modules themselves.
  
  @param m1 A module in this graph
  @param m2 A module in this graph
  @return The deepest common dep of {@code m1} and {@code m2}, or null if
  they have no common dependencies