Vova, the Ultimate Thule new shaman, wants to build a pipeline. As there are exactly n houses in Ultimate Thule, Vova wants the city to have exactly n pipes, each such pipe should be connected to the water supply. A pipe can be connected to the water supply if there's water flowing out of it. Initially Vova has only one pipe with flowing water. Besides, Vova has several splitters.

A splitter is a construction that consists of one input (it can be connected to a water pipe) and x output pipes. When a splitter is connected to a water pipe, water flows from each output pipe. You can assume that the output pipes are ordinary pipes. For example, you can connect water supply to such pipe if there's water flowing out from it. At most one splitter can be connected to any water pipe.

 The figure shows a 4-output splitter

Vova has one splitter of each kind: with 2, 3, 4, ..., k outputs. Help Vova use the minimum number of splitters to build the required pipeline or otherwise state that it's impossible.

Vova needs the pipeline to have exactly n pipes with flowing out water. Note that some of those pipes can be the output pipes of the splitters.

Input

The first line contains two space-separated integers n and k (1 ≤ n ≤ 1018, 2 ≤ k ≤ 109).

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.

Output

Print a single integer — the minimum number of splitters needed to build the pipeline. If it is impossible to build a pipeline with the given splitters, print -1.

Examples

Input

4 3

Output

2

Input

5 5

Output

1

Input

8 4

Output

-1

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; long long n,k;
bool f(long long mid) {
long long s;
s=(k+1)*k/2-mid*(mid-1)/2-(k-mid);
if(mid==k) s=mid;
if(s>=n) return true;
else return false;
}
int main() { scanf("%lld%lld",&n,&k);
long long sum=0;
sum=k*(k+1)/2-k+1;
long long ans=k-1;
long long l=2,r=k+1;
long long mid=(l+r)/2;
if(sum<n) {
printf("-1\n");
} else if(n==1) {
printf("0");
} else {
while(mid-l>0) {
//mid=(l+r)/2;
if(f(mid)) {
l=mid;
mid=l+(r-l)/2;
} else {
mid=l+(mid-l)/2;
}
}
long long ans=0;
ans=k+1-mid;
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. Yii2的深入学习--事件Event
  2. Mac通过终端显示和隐藏 隐藏文件
  3. 推荐相关学习 &amp; 典型算法、典型特征、典型推荐系统框架
  4. 转 浅谈算法和数据结构: 十 平衡查找树之B树
  5. cmake gcc等安装备案
  6. 在Linux下给mysql创建用户并分配权限及问题解决方案
  7. python函数的参数
  8. windows关机命令
  9. 160923、项目管理模式:如何去除SVN标记
  10. SQL将金额转换为汉子
  11. Cocos2dx 多线程
  12. 利用__index和__newindex实现默认值表、监控表、只读表(转)
  13. 第八周 ip通信基础回顾
  14. LeetCode174-Dungeon Game-数组,动态规划
  15. 站在DevOps肩膀上的TestOps(一)
  16. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth
  17. 我们的团队-IT梦想队
  18. Docker 容器入门
  19. oracle 替换字符串中指定位置内容
  20. Spring boot 集成 mybaits plus(代码生成器)

热门文章

  1. 30个Jquery灯箱插件
  2. Python 使用正则表达式验证密码必须包含大小写字母和数字
  3. Jmeter-线程日志查看
  4. multitail
  5. MySQL 数据底部出现总计字样 第二种办法 纵向合并 20161103
  6. 【Lintcode】036.Reverse Linked List II
  7. 关闭windows10自动更新
  8. Python3解leetcode Same Tree
  9. C# 使用 StreamWriter 写入数据
  10. msfvenom 摄像头