island
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+3;
char mp[N][N];
int n,m;
int dx[5]{0,0,-1,1};
int dy[5]{-1,1,0,0};
bool check(int kx,int ky){
	if(n<kx||kx<1||m<ky||ky<1)
		return false;
	return mp[kx][ky]=='#';
}
void dfs(int x,int y){
	for(int i=0;i<4;++i){
		int nx=x+dx[i],ny=y+dy[i];
		if(check(nx,ny)){
			mp[nx][ny]='.';
			dfs(nx,ny);
		}
	}
} 
int main(){
	freopen("island.in","r",stdin);
	freopen("island.out","w",stdout);
	
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			cin>>mp[i][j];
			
	for(int i=1;i<=n;++i){
		if(mp[i][1]=='#'){
			mp[i][1]='.';
			dfs(i,1);
		} 
		if(mp[i][m]=='#'){
			mp[i][m]='.';
			dfs(i,m);
		} 
	}	
	for(int j=1;j<=m;++j){
		if(mp[1][j]=='#'){
			mp[1][j]='.';
			dfs(1,j);
		}	
		if(mp[n][j]=='#'){
			mp[n][j]='.';
			dfs(n,j);
		}
	}	
	
	int ans=0;
	for(int i=2;i<=n;++i){
		for(int j=2;j<=m;++j){
			if(mp[i][j]=='#'){
				mp[i][j]='.';
				dfs(i,j);
				++ans;
			}
		}
	}
	cout<<ans;
	
 return 0;
} 
/*

*/
josephus
  #include<bits/stdc++.h>
using namespace std;
int n,m;
queue<int> q;
int main(){
	freopen("josephus.in","r",stdin);
	freopen("josephus.out","w",stdout);
	
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		q.push(i);
	int i=1;
	while(!q.empty()){
		if(i==m){
			i=1;
			cout<<q.front()<<' ';
			q.pop();
		}
		else{
			int t=q.front();
			q.pop();
			q.push(t);
			++i;	
		}
			
	}
	
	
 return 0;
} 
/*
5 2

2 4 1 5 3

7 3
 
3 6 2 7 5 1 4
*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
struct str{int s,t;}a[N];
int n;
bool cmp(str a,str b){
  if(a.t!=b.t)return a.t<b.t;
  return a.s<b.s;
}
int main(){
  freopen("meeting.in","r",stdin);
  freopen("meeting.out","w",stdout);
  
  cin>>n;
  for(int i=1;i<=n;++i){
  	cin>>a[i].s>>a[i].t;
  }
  sort(a+1,a+1+n,cmp);
  int ans=1,lt=a[1].t;
  for(int i=2;i<=n;++i){
  	if(a[i].s>=lt){
  		lt=a[i].t;
  		++ans;
  	}
  }
  cout<<ans;
  
return 0;
} 
/*
3
1 2
2 3
1 3

2

5
1 3
2 5
4 6
5 7
7 8

3
*/
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=5e2+5;
int n,k;
int a[N];
bool check(ull d){
  ull s0=0,s=0,t=1;
  for(int i=1;i<=n;++i){
  	if(a[i]>d||t>k)return 0;	
  	if(s0+(a[i]+s)*(a[i]+s)>d){
  		s0+=s*s;
  		s=a[i];
  		++t;
  	}else{
  		s+=a[i];
  	}
  }
  return t<=k;
}
int main(){
//	freopen("segment.in","r",stdin);
//	freopen("segment.out","w",stdout);
  
  cin>>n>>k;
  for(int i=1;i<=n;++i)
  	cin>>a[i];
  ull l=0,r=5e5+1;
  while(r-l>1){//(]
  	int mid=r+l>>1;
  	if(check(mid))
  		r=mid;
  	else l=mid;
  }
  cout<<r*r;
  
return 0;
} 
/*
4 2
1 100 1 100

*/