https://codeforces.com/contest/670/problem/D2

The term of this problem is the same as the previous one, the only exception — increased restrictions.

Input

The first line contains two positive integers n and k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 109) — the number of ingredients and the number of grams of the magic powder.

The second line contains the sequence a1, a2, ..., an (1 ≤ ai ≤ 109), where the i-th number is equal to the number of grams of the i-th ingredient, needed to bake one cookie.

The third line contains the sequence b1, b2, ..., bn (1 ≤ bi ≤ 109), where the i-th number is equal to the number of grams of the i-th ingredient, which Apollinaria has.

Output

Print the maximum number of cookies, which Apollinaria will be able to bake using the ingredients that she has and the magic powder.

Examples

input

1 1000000000
1
1000000000

output

2000000000

input

10 1
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000
1 1 1 1 1 1 1 1 1 1

output

0

input

3 1
2 1 4
11 3 16

output

4

input

4 3
4 3 5 6
11 12 14 20

output

3

题意:同上一题,就是数开大了,得用二分 Hait: INF比较小,所以得用3000000000ll就行了

#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef  long long ll ;
ll need[100008];
ll have[100008];
ll tmpp[100008];
ll n,k;
ll Slove(ll mid)
{   ll sum=k;
    for(ll i=1;i<=n;i++)
    {
        tmpp[i]=have[i]-mid*need[i];
        if(tmpp[i]<0)sum+=tmpp[i];
        if(sum<0)return 0;
    }
    return 1;
}
int main()
{
    while(~scanf("%I64d%I64d",&n,&k))
    {
        for(ll i=1;i<=n;i++)
        {
            scanf("%I64d",&need[i]);
        }
        for(ll i=1;i<=n;i++)
        {
            scanf("%I64d",&have[i]);
        }
        ll ans=0;
        ll mid;
        ll l=0;
        ll r=3000000000ll;
        while(r>=l)
        {
            mid=(l+r)/2;
            if(Slove(mid)==1)
            {
                ans=mid;
                l=mid+1;
            }
            else
            {
                r=mid-1;
            }
        }
        printf("%I64d\n",ans);
    }
    //cout << "Hello world!" << endl;
    return 0;
}