JSFiddle - React, Tailwind, and code Playground

JavaScript

function median(a, b) {
	const target = Math.floor((a.length + b.length) / 2);

	function findMatchingIndexFromA(n, start, finish) {
  	if (finish === 0) return 0;
    if (start === a.length - 1) return a.length;
    
    const middle = Math.floor((start + finish) / 2);
    if (a[middle] > n) return findMatchingIndexFromA(n, start, middle);
    if (a[middle + 1] < n) return findMatchingIndexFromA(n, middle, finish);
   	return middle;
  }
  
  function binary(start, finish, lastCall = [null, null]) {
    const middle = Math.ceil((start + finish) / 2);
    const match = findMatchingIndexFromA(b[middle], 0, a.length);
    
    const index = middle + match + 1;
    
    const isStuck = lastCall[0] === start && lastCall[1] === finish;
    if (isStuck) return median(b, a);
    
    if (index < target) return binary(middle, finish, [start, finish]);
    if (index > target) return binary(start, middle, [start, finish]);
    
    return b[middle];
  }
  
  return binary(0, b.length);
}


document.write(median([3,4,5,,10,11,12], [1,2,6,7,8,9,13,14]))