public static int searchHelper(int[] arr, int tgt, int p, int r) {
		if ( p > r) {
			return -1;			
		}
		
		int		m  =  (p + r) / 2;
		int		valMid   =   arr[m];
		
		// trivial case
		if ( valMid == tgt ) {
			return		m;
		}
		// non trivial cases
		if ( valMid < tgt ) {
			if ( arr[r] >= tgt ) {
				return searchHelper(arr, tgt, m+1, r);
			} else {
				return searchHelper(arr, tgt, p, m-1);
			}
		} else {
			if ( arr[p] <= tgt ) {
				return searchHelper(arr, tgt, p, m-1);
			} else {
				return searchHelper(arr, tgt, m+1, r);
			}
		}
	}