Getting TLE in 9th TC - SPOJ Eko

Question link SPOJ-EKO


#include <bits/stdc++.h>
using namespace std;

long long int arr[1000009];

long long int checkit(long long int arr[], long long int start, long long int end, long long int m, long long int n)
{
	long long int mid = start + ((end-start)/2);
	long long int summ = 0;
	if(start >= end) return -1;
	for(long long int i = 0; i < n; i++)
	{
		if(arr[i] >= mid) summ += (arr[i]-mid);
	}

	if(summ > m)
	{
		return checkit(arr, mid, end, m, n);
	}
	else if(summ < m)
	{
		return checkit(arr, start, mid-1, m, n);
	}
	else
	{
		long long int d1 = checkit(arr, mid+1, end, m, n);
		if(d1 == -1) return mid;
		else return d1;
	}

}
int main()
{
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);

	long long int n, m;
	cin >> n >> m;

	long long int end = -1;
	for(long long int i = 0; i < n; i++)
	{
		cin >> arr[i];
		end = max(end, arr[i]);
	}

	cout << checkit(arr, 0, end, m, n) << "\n";
	return 0;

}

I don’t know what’s wrong with my code. To be honest, I am often confused about whether to take start = mid or start = mid+1 and end = mid or end = mid-1.