#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cassert>
using namespace std;

using flt=double;
#define clamp(x,l,r) (x<l?l:x>r?r:x)
const int e3=1000;





int main() { /* CURSOR START */
	ios_base::sync_with_stdio(0); cin.tie(0);
	const int N=1<<20;
	int n,K; cin>>n>>K;
	static int p[N],d[N];
	for(int i=1;i<=n;i++) cin>>p[i]>>d[i];

	assert(n==clamp(n,1,100*e3) && K==clamp(K,1,100*e3));
	d[0]=-1;
	d[n+1]=d[n]+1;
	for(int i=1;i<=n;i++) assert(p[i]==clamp(p[i],1,100) && d[i]==clamp(d[i],0,8*e3*e3) && d[i]>d[i-1]);

	static flt _p2[81];
	_p2[0]=1; for(int i=1;i<=80;i++) _p2[i]=_p2[i-1]/2;
	#define p2(e) _p2[min(80,e)]
	static flt pfx[N],sfx[N];
	pfx[0]=sfx[n+1]=0;
	for(int i=1;i<=n;i++) pfx[i]=pfx[i-1]*p2(d[i]-d[i-1])+p[i];
	for(int i=n;i>=1;i--) sfx[i]=sfx[i+1]*p2(d[i+1]-d[i])+p[i];
	static flt add[N][81];
	for(int r=1;r<=n;r++) for(int l=max(1,r-80);l<=r;l++) {
			add[r][r-l]=0;
			if(d[r]-d[l]>80) continue;
			for(int i=l;i<=r;i++) {
				flt lef=pfx[i]-p2(d[i]-d[l-1])*pfx[l-1];
				flt rig=sfx[i]-p2(d[r+1]-d[i])*sfx[r+1];
				add[r][r-l]=max(add[r][r-l],lef+rig-p[i]);
			}
		}

	auto solve=[&](flt l) -> pair<flt,int> {
		static pair<flt,int> dp[N];
		dp[0]={0,0};
		for(int i=1;i<=n;i++) {
			dp[i]=dp[i-1];
			for(int j=max(1,i-80);j<=i;j++) dp[i]=max(dp[i],make_pair(dp[j-1].first-l+add[i][i-j],dp[j-1].second+1));
		}
		// dbg(l,dp[n]);
		return dp[n];
	};
	flt l_l=0,l_r=300;
	for(int its=0;its<40;its++) {
		flt l=(l_l+l_r)/2;
		int k=solve(l).second;
		if(k==K) { l_l=l_r=l; break; }
		(k>K?l_l:l_r)=l;
	}
	auto res=solve(l_l);
	cout<<fixed<<setprecision(9)<<res.first+l_l*K<<endl;
}
