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

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

#pragma GCC optimize ("Ofast")
#pragma GCC target ("avx2")



int main() { /* CURSOR START */
	ios_base::sync_with_stdio(0); cin.tie(0);
	const int N=100<<10;
	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[61];
	_p2[0]=1; for(int i=1;i<=60;i++) _p2[i]=_p2[i-1]/2;
	#define p2(e) _p2[min(60,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][61];
	for(int r=1;r<=n;r++) for(int l=max(1,r-60);l<=r;l++) {
			add[r][r-l]=0;
			if(d[r]-d[l]>60) 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]);
			}
		}

	static flt dp[64][N];
	for(int i=1;i<=n;i++) {
		flt *ndp=dp[i&63];
		memcpy(ndp,dp[(i-1)&63],sizeof dp[i&63]);
		for(int j=max(1,i-60);j<=i;j++) {
			flt z=add[i][i-j];
			flt *odp=dp[(j-1)&63];
			int ub=min(K-1,j-1);
			for(int k=0;k<=ub;k++) if(odp[k]+z>ndp[k+1]) ndp[k+1]=odp[k]+z;
		}
	}

	cout<<fixed<<setprecision(9)<<dp[n&63][K]<<endl;
}
