#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#define L first
#define R second
using namespace std;
typedef pair<int,int> pii;
int n,m,ans;
pii seg[210];
vector<pii> good,bad;
int f[210][210],g[210][210];
bool cmp(const pii &a,const pii &b)
{
    if(a.L != b.L) return a.L < b.L;
    return a.R > b.R;
}
bool cmp2(const pii &a,const pii &b)
{
    return a.R-a.L > b.R-b.L;
}
int main()
{
    int i,j,k,l,r,sum;
    int bLen,gLen;
    while(scanf("%d%d",&n,&m)>0)
    {
        good.clear(); bad.clear();
        
        for(i=1;i<=n;i++) scanf("%d%d",&seg[i].L,&seg[i].R);
        sort(seg+1,seg+1+n,cmp);
        for(i=1;i<=n;i++)
        {
            for(j=i+1;j<=n;j++) if(seg[i].L<=seg[j].L && seg[i].R>=seg[j].R)
            {
                good.push_back(seg[i]);
                break;
            }
            if(j>n) bad.push_back(seg[i]);
        }
        bLen = bad.size(); gLen = good.size();
        
        sort(good.begin(),good.end(),cmp2);
        for(i=1;i<=bLen;i++)
        {
            l = bad[i-1].L; r = bad[i-1].R;
            for(j=i;j<=bLen;j++)
            {
                l = bad[j-1].L; r = min(r,bad[j-1].R);
                g[i][j] = r-l>0?r-l:-100000000;
            }
        }
        
        memset(f,-60,sizeof(f)); f[0][0] = 0;
        for(i=1;i<=bLen;i++) for(j=1;j<=m;j++) for(k=0;k<i;k++)
            f[i][j] = max(f[i][j],f[k][j-1]+g[k+1][i]);
        
        ans = f[bLen][m];
        for(i=1,sum=0;i<=gLen;i++)
        {
            if(i>=m) break;
            sum += good[i-1].R-good[i-1].L;
            ans = max(ans,f[bLen][m-i]+sum);
        }
        printf("%d\n",ans);
    }
    return 0;
}