#include<bits/stdc++.h>

using namespace std;

#define LL long long
#define N 300
#define INF 0x3f3f3f3f3f3f3f3fLL
#define B 233

const LL mod=1000000007;
LL n,p,mx,ans,a[N],c[N];
map<LL,vector< pair<LL,LL> > > mp;
struct node{LL b,c,i;}b[N];

bool cmp(node x,node y){return x.b<y.b;}

LL popcount(LL x,LL y){
	if (x>=y) return INF;
	LL ret=0;
	for (LL i=60;i>=0;i--)
		if (((x>>i)&1)!=((y>>i)&1)){
			ret++;
			return ret;
		}
		else ret+=(x>>i)&1;
	return INF;
}

int main(){
	scanf("%lld%lld",&n,&p);
	for (LL i=1;i<=n;i++) scanf("%lld",&a[i]);
	for (LL i=0;i<=60;i++){
		memset(b,0,sizeof b);
		for (LL j=1;j<=n;j++) b[j].b=a[j]%(1LL<<i),b[j].c=a[j]/(1LL<<i),b[j].i=j;
		sort(b+1,b+n+1,cmp);
		for (LL j=0;j<=n;j++){
			LL k=((j==0)?0:popcount(b[j].b,b[j+1].b)),hsh=0;
			LL mn=p-k-i; bool fl=0;
			b[j].c--;
			for (LL k=1;k<=n;k++){
				if (b[k].c<0){fl=1; break;}
				mn=min(mn,b[k].c);
			}
			if (mn<0 || fl) continue;
			for (LL k=1;k<=n;k++) c[b[k].i]=b[k].c;
			for (LL k=2;k<=n;k++) hsh=((hsh*B+(c[k]-c[k-1]))%mod+mod)%mod;
			mp[hsh].push_back(make_pair(c[1]-mn,c[1]));
		}
	}
	for (map<LL,vector< pair<LL,LL> > >::iterator i=mp.begin();i!=mp.end();i++){
		vector< pair<LL,LL> > &vec=i->second;// puts("-----");
		sort(vec.begin(),vec.end()); mx=0;
		for (LL j=0;j<(LL)vec.size();j++){
			//cout<<vec[j].first<<' '<<vec[j].second<<endl;
			if (mx<=vec[j].second){ans=(ans+vec[j].second-max(vec[j].first,mx)+1)%mod; mx=vec[j].second+1;}
		}
	}
	printf("%lld\n",ans);
	
	return 0;
}
			