#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		if( a[i][j])a[i][j] = a[i][j+1] + 1;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		int M = 0;
		for(int i = 0 ; i < n ; i ++ ){
			t[a[i][k]] ++;
			M = max(M,a[i][k]);
		}
		int len = 0;
		for(int i = M ; i > 0 ; i -- )if( t[i] ){
			len += t[i];
			r = max( r , i * len );
		}

		for(int i = 1 ; i <= M ; i ++ )t[i] = 0;
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
char in[5005];
int a[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ ){
		scanf("%s",in);
		for(int j = 0 ;j < m ; j ++ )a[i][j] = in[j]-'0';
	}

	if( m <4000 )
	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		if( a[i][j])a[i][j] = a[i][j+1] + 1;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		int M = 0;
		if( m < 4000 ){
			for(int i = 0 ; i < n ; i ++ ){
				t[a[i][k]] ++;
				M = max(M,a[i][k]);
			}
			int len = 0;
			for(int i = M ; i > 0 ; i -- )if( t[i] ){
				len += t[i];
				r = max( r , i * len );
			}

			for(int i = 1 ; i <= M ; i ++ )t[i] = 0;
		}
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	if( m <4000 )
	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		if( a[i][j])a[i][j] = a[i][j+1] + 1;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		int M = 0;
		for(int i = 0 ; i < n ; i ++ ){
			t[a[i][k]] ++;
			M = max(M,a[i][k]);
		}
		int len = 0;
		for(int i = M ; i > 0 ; i -- )if( t[i] ){
			len += t[i];
			r = max( r , i * len );
		}

		for(int i = 1 ; i <= M ; i ++ )t[i] = 0;
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int L[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		L[i][j] = L[i][j+1] + 1;
		if( a[i][j] == 0 ) L[i][j] = 0;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		for(int i = 0 ; i < n ; i ++ )t[i] = 0;
		for(int i = 0 ; i < n ; i ++ )t[L[i][k]] ++;

		int len = 0;
		for(int i = m ; i > 0 ; i -- )if( t[i] ){
			len += t[i];
			r = max( r , i * len );
		}
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int L[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		L[i][j] = L[i][j+1] + 1;
		if( a[i][j] == 0 ) L[i][j] = 0;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		for(int i = 0 ; i < m ; i ++ )t[i] = 0;
		for(int i = 0 ; i < n ; i ++ )t[L[i][k]] ++;

		int len = 0;
		for(int i = m ; i > 0 ; i -- )if( t[i] ){
			len += t[i];
			r = max( r , i * len );
		}
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	if( m <4000 )
	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		if( a[i][j])a[i][j] = a[i][j+1] + 1;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		int M = 0;
		if( m < 4000 ){
			for(int i = 0 ; i < n ; i ++ ){
				t[a[i][k]] ++;
				M = max(M,a[i][k]);
			}
			int len = 0;
			for(int i = M ; i > 0 ; i -- )if( t[i] ){
				len += t[i];
				r = max( r , i * len );
			}

			for(int i = 1 ; i <= M ; i ++ )t[i] = 0;
		}
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int L[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		L[i][j] = L[i][j+1] + 1;
		if( a[i][j] == 0 ) L[i][j] = 0;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		int M = 0;
		for(int i = 0 ; i < n ; i ++ ){
			t[L[i][k]] ++;
			M = max(M,L[i][k]);
		}
		int len = 0;
		for(int i = M ; i > 0 ; i -- )if( t[i] ){
			len += t[i];
			r = max( r , i * len );
		}

		for(int i = 1 ; i <= M ; i ++ )t[i] = 0;
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
int a[5005][5005];
int L[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ )for(int j = 0 ; j < m ; j ++ )scanf("%1d",&a[i][j]);

	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		L[i][j] = L[i][j+1] + 1;
		if( a[i][j] == 0 ) L[i][j] = 0;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		for(int i = 0 ; i < n ; i ++ )t[i] = L[i][k];
		sort(t,t+n);

		for(int i = n - 1 ; i >= 0 ; i -- )r = max( r , t[i] * (n-i) );
	}

	cout << r << endl;
}


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;

#define ll long long
#define pi pair<int ,int >
#define pll pair<ll,ll>
#define pii pair<int ,pi>
#define X first
#define Y second
#define pb push_back
#define ab(x) ((x)<0?(-(x)):(x))
#define xx(x) ((x)*(x))
#define mp make_pair
#define vi vector<int >
#define vll vector<ll>
#define vs vector<string>
#define vpi vector<pi>
#define vpll vector<pll>
#define ALL(x) (x).begin(),(x).end()
#define Max (1<<30)
#define LLMax (1ll<<60)
template<class T>string ToString(T t){stringstream s;s<<t;return s.str();}
template<class T>void ToOther(T&t,string a){stringstream s(a);s>>t;}

int n,m;
char in[5005];
int a[5005][5005];
int t[5005];

int main(){
	cin >> n >> m;

	for(int i = 0 ; i < n ; i ++ ){
		scanf("%s",in);
		for(int j = 0 ;j < m ; j ++ )a[i][j] = in[j]-'0';
	}

	for(int i = 0 ; i < n ; i ++ )for(int j = m - 1 ; j >= 0 ; j -- ){
		if( a[i][j])a[i][j] = a[i][j+1] + 1;
	}

	int r = 0;
	for(int k = 0 ; k < m ; k ++ ){
		int M = 0;

		for(int i = 0 ; i < n ; i ++ ){
			t[a[i][k]] ++;
			M = max(M,a[i][k]);
		}
		int len = 0;
		for(int i = M ; i > 0 ; i -- )if( t[i] ){
			len += t[i];
			r = max( r , i * len );
		}

		for(int i = 1 ; i <= M ; i ++ )t[i] = 0;

	}

	cout << r << endl;
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
//#define e 10000
#define inf 1000000000000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define maxsum 40000
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N=5050;
int n,m,a[N][N];
char s[N];
int main(){
    read(n),read(m);
    gets(s);
    clr(a,0);
    for(int i=1;i<=n;i++){
        gets(s+1);
        for(int j=1;j<=m;j++){
            if(s[j]=='1'){
                int jj=j;
                while(jj<m && s[jj+1]=='1'){
                    jj++;
                }
                a[j][jj]++;
                j=jj;
            }
        }
    }
    //
    int ans=0;
    for(int i=1;i<=m;i++){
        for(int j=m;j>=i;j--){
            a[i][j]+=a[i-1][j]+a[i][j+1]-a[i-1][j+1];
            ans=max(ans,(j-i+1)*a[i][j]);
        }
    }
    printf("%d",ans);
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
#define e 10000
#define maxxx 100000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define inf 2147483647
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N = 5100,M=5100;
int n,m,k;
int r[N][M],tmp[N],s[N];
char a[N][N];
int main(){
    read(n);read(m);
    for(int i=1;i<=n;i++){

            scanf("%s",a[i]+1);
    }

    for(int i=1;i<=n;i++){
        r[i][m]=a[i][m]-'0';
        for(int j=m-1;j>=1;j--){
            if(a[i][j]=='0'){
                r[i][j]=0;
            }
            else{
                r[i][j]=r[i][j+1]+1;
            }
        }
    }
    int ans=0,cur;
    for(int j=1;j<=m;j++){
        clr(tmp,0);
        for(int i=1;i<=n;i++){
            tmp[r[i][j]]++;
        }
        int t=1;

        for(int i=0;i<=m;i++){
            while(tmp[i]>0){
                s[t]=i;
                t++;
                tmp[i]--;
            }
        }

        for(int i=1;i<=n;i++){
            cur=s[i]*(n-i+1);
            if(cur>ans) ans=cur;
        }
    }
    printf("%d",ans);
    return 0;
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
#define e 10000
#define maxxx 100000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define inf 2147483647
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N = 5100,M=5100;
int n,m,k;
int r[N][M],tmp[N];
char a[N][N];
int main(){
    read(n);read(m);
    for(int i=1;i<=n;i++){
        //for(int j=1;j<=m;j++){
            scanf("%s",a[i]+1);
    }

    for(int i=1;i<=n;i++){
        r[m][i]=a[i][m]-'0';
        for(int j=m-1;j>=1;j--){
            if(a[i][j]=='0'){
                r[j][i]=0;
            }
            else{
                r[j][i]=r[j+1][i]+1;
            }
        }
    }
    int ans=0,cur;
    for(int j=1;j<=m;j++){
        sort(r[j]+1,r[j]+n+1);
        for(int i=1;i<=n;i++){
            ans=max(ans,(n-i+1)*r[j][i]);
        }
    }
    printf("%d",ans);
    return 0;
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
//#define e 10000
#define inf 1000000000000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define maxsum 40000
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N=5050;
int n,m,a[N][N];
char s[N];
int main(){
    read(n),read(m);
    gets(s);
    clr(a,0);
    for(int i=1;i<=n;i++){
        gets(s+1);
        for(int j=1;j<=m;j++){
            if(s[j]=='1'){
                int jj=j;
                while(jj<m && s[j+1]=='1'){
                    jj++;
                }
                a[j][jj]++;
                j=jj;
            }
        }
    }
    //
    int ans=0;
    for(int i=1;i<=m;i++){
        for(int j=m;j>=i;j--){
            a[i][j]+=a[i-1][j]+a[i][j+1]-a[i-1][j+1];
            ans=max(ans,(j-i+1)*a[i][j]);
        }
    }
    printf("%d",ans);
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
#define e 10000
#define maxxx 100000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define inf 2147483647
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N = 5100,M=5100;
int n,m,k;
int a[N][M],r[N][M],tmp[N],s[N];
char c;
int main(){
    read(n);read(m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>c;
            a[i][j]=c-'0';
        }
    }
    for(int i=1;i<=n;i++){
        r[i][m]=a[i][m];
        for(int j=m-1;j>=1;j--){
            if(a[i][j]==0){
                r[i][j]=0;
            }
            else{
                r[i][j]=r[i][j+1]+1;
            }
        }
    }
    int ans=0,cur;
    for(int j=1;j<=m;j++){
        clr(tmp,0);
        for(int i=1;i<=n;i++){
            tmp[r[i][j]]++;
        }
        int t=1;

        for(int i=0;i<=m;i++){
            while(tmp[i]>0){
                s[t]=i;
                t++;
                tmp[i]--;
            }
        }

        for(int i=1;i<=n;i++){
            cur=s[i]*(n-i+1);
            if(cur>ans) ans=cur;
        }
    }
    printf("%d",ans);
    return 0;
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
#define e 10000
#define maxxx 100000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define inf 2147483647
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N = 5100,M=5100;
int n,m,k;
int r[N][M],tmp[N];
int a[N][N];
char c;
int main(){
    read(n);read(m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>c;
            a[i][j]=c-'0';
        }
    }

    for(int i=1;i<=n;i++){
        r[m][i]=a[i][m];
        for(int j=m-1;j>=1;j--){
            if(a[i][j]==0){
                r[j][i]=0;
            }
            else{
                r[j][i]=r[j+1][i]+1;
            }
        }
    }
    int ans=0,cur;
    for(int j=1;j<=m;j++){
        sort(r[j]+1,r[j]+n+1);
        for(int i=1;i<=n;i++){
            ans=max(ans,(n-i+1)*r[j][i]);
        }
    }
    printf("%d",ans);
    return 0;
}


/*
ID: roben_71
PROG: acrobat
LANG: C++
*/
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include <cmath>
#include<set>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#define pb push_back
//#define pop pop_back
#define li 200009
#define e 10000
#define maxxx 100000000
#define mp make_pair
#define ss second.second
#define sf second.first
#define fs first.second
#define ff first.first
#define st first
#define nd second
#define ll long long
#define inf 2147483647
#define rep(i,r,n) for(int i=r;i<=n;i++)
#define clr(x,i) memset(x,i,sizeof(x))
#define min(x,i) x<i?x:i
#define max(x,i) x>i?x:i
#define ro(x,i) x-i<0?i-x:x-i
#define abs(x) x<0?-x:x
#define read(x) scanf("%d",&x)
#define getf scanf
#define print(x) printf("%d ",x)
//#define end printf("\n")
using namespace std;
//ifstream fin;
//ofstream fout;
FILE *outt,*inn;
ifstream fin("1.txt");
const int N = 5100,M=5100;
int n,m,k;
int r[N][M],tmp[N];
char a[N][N];
int main(){
    read(n);read(m);
    for(int i=1;i<=n;i++){
        //for(int j=1;j<=m;j++){
            scanf("%s",a[i]+1);
    }

    for(int i=1;i<=n;i++){
        r[m][i]=a[i][m]-'0';
        for(int j=m-1;j>=1;j--){
            if(a[i][j]='0'){
                r[j][i]=0;
            }
            else{
                r[j][i]=r[j+1][i]+1;
            }
        }
    }
    int ans=0,cur;
    for(int j=1;j<=m;j++){
        sort(r[j]+1,r[j]+n+1);
        for(int i=1;i<=n;i++){
            ans=max(ans,(n-i+1)*r[j][i]);
        }
    }
    printf("%d",ans);
    return 0;
}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

bool used[MN][MN];
lo add[MN];
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif
      lo n, m;
      cin >> n >> m;

      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          char c;
          cin >> c;
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      lo out = 0;
      memset(add, 0, sizeof add);
      FOR(j, m)
      {
          vector<lo> det;
          FOR(i, n)
          {
              if(used[j][i])
              {
                  det.push_back(i);
                  add[j]++;
              }
          }
          out = max(out, add[j]);
          lo sz = sz(det) - 1;
          for(lo k = j + 1; k < m; k++)
          {
              if(sz == -1)
                  break;
              FOR(q, sz + 1)
              {
                  if(used[k][det[q]])
                  {
                      used[k][det[q]] = false;
                      add[k]++;
                  }
                  else
                  {
                      swap(det[q], det[sz]);
                      q--;
                      sz--;
                  }
              }
              if(sz == -1)
                  break;
              out = max(out, (k - j + 1) * add[k]);
          }
      }
      cout << out;
}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

bool used[MN][MN];
lo add[MN];
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif
      lo n, m;
      cin >> n >> m;

      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      lo out = 0;
      memset(add, 0, sizeof add);
      FOR(j, m)
      {
          vector<lo> det;
          FOR(i, n)
          {
              if(used[j][i])
              {
                  det.push_back(i);
                  add[j]++;
              }
          }
          out = max(out, add[j]);
          lo sz = sz(det) - 1;
          for(lo k = j + 1; k < m; k++)
          {
              if(sz == -1)
                  break;
              FOR(q, sz + 1)
              {
                  if(used[k][det[q]])
                  {
                      used[k][det[q]] = false;
                      add[k]++;
                  }
                  else
                  {
                      swap(det[q], det[sz]);
                      q--;
                      sz--;
                  }
              }
              if(sz == -1)
                  break;
              out = max(out, (k - j + 1) * add[k]);
          }
      }
      cout << out;
}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

bool used[MN][MN];
lo add[MN];
char mine[MN];
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif
      lo n, m;
      scanf("%d%d", &n, &m);
      memset(used, 0, sizeof used);
      FOR(i, n)
      {
          scanf("%s", &mine);
          FOR(j, m)
          {
              if(mine[j] == '1')
              {
                  used[j][i]++;
              }
          }
      }
      lo out = 0;
      memset(add, 0, sizeof add);
      FOR(j, m)
      {
          vector<lo> det;
          FOR(i, n)
          {
              if(used[j][i])
              {
                  det.push_back(i);
                  add[j]++;
              }
          }
          out = max(out, add[j]);
          lo sz = sz(det) - 1;
          for(lo k = j + 1; k < m; k++)
          {
              if(sz == -1)
                  break;
              FOR(q, sz + 1)
              {
                  if(used[k][det[q]])
                  {
                      used[k][det[q]] = false;
                      add[k]++;
                  }
                  else
                  {
                      swap(det[q], det[sz]);
                      q--;
                      sz--;
                  }
              }
              if(sz == -1)
                  break;
              out = max(out, (k - j + 1) * add[k]);
          }
      }
      cout << out;
}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

lo fen[MN][MN];
lo used[MN][MN];
lo a[MN];
lo b[MN];
lo n, m;

lo out = 0;
void can()
{
    memset(fen, 0, sizeof fen);
    FOR(i, n)
    {
        lo cnt = 0;
        FOR(j, m + 1)
        {
            if(!used[j][i])
            {
                if(cnt)
                {
                    fen[j - cnt][j - 1]++;
                }
                cnt = 0;
            }
            else
                cnt++;
        }
    }
    lo all = 0;
    FOR(i, m) for(lo j = i; j < m; j++)
    {
        all += fen[i][j];
        a[j + 1] += fen[i][j];
        if(i)
            b[i - 1] += fen[i][j];
    }
    FOR(i, m)
    {
        if(i)
            a[i] += a[i - 1];
    }
    for(lo i = m - 2; i >= 0; i--)
    {
        b[i] += b[i + 1];
    }
    FOR(i, m) for(lo j = i; j < m; j++)
    {
        out = max(out, (j - i + 1) * (all - a[j] - b[i]));
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif

      cin >> n >> m;
      //n = 500;
      //m = 500;
      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          //c = ((j & 1) ? '1' : '0');
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      can();
      cout << out;

}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

bool used[MN][MN];
lo add[MN];
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif
      lo n, m;
      cin >> n >> m;

      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      lo out = 0;
      memset(add, 0, sizeof add);
      FOR(j, m)
      {
          vector<lo> det;
          FOR(i, n)
          {
              if(used[j][i])
              {
                  det.push_back(i);
                  add[j]++;
              }
          }
          out = max(out, add[j]);
          lo sz = sz(det) - 1;
          for(lo k = j + 1; k < m; k++)
          {
              FOR(q, sz + 1)
              {
                  if(used[k][det[q]])
                  {
                      used[k][det[q]] = false;
                      add[k]++;
                  }
                  else
                  {
                      swap(det[q], det[sz]);
                      q--;
                      sz--;
                  }
              }
              out = max(out, (k - j + 1) * add[k]);
          }
      }
      cout << out;
}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

lo fen[MN][MN];
lo used[MN][MN];
lo n, m;

lo out = 0;
void can()
{

    FOR(i, n)
    {
        lo cnt = 0;
        FOR(j, m + 1)
        {
            if(!used[j][i])
            {
                if(cnt)
                {
                    fen[j - cnt][j - 1]++;
                }
                cnt = 0;
            }
            else
                cnt++;
        }
    }
    for(lo i = m; i > 0; i--)
    {
        for(lo j = 0; j + i - 1 < m; j++)
        {
            out = max(out, i * fen[i][i + j - 1]);
            fen[i][i + j - 2] += fen[i][i + j - 1];
            fen[i + 1][i + j - 1] += fen[i][i + j - 1];
        }
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif

      cin >> n >> m;
      //n = 500;
      //m = 500;
      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          //c = ((j & 1) ? '1' : '0');
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      can();
      cout << out;

}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

lo fen[MN];
lo used[MN][MN];
lo n, m;

lo out = 0;
void can()
{
    vector<pair<lo, pair<lo, lo> > > segm;
    vector<lo> ids;
    FOR(i, n)
    {
        lo cnt = 0;
        FOR(j, m + 1)
        {
            if(!used[j][i])
            {
                if(cnt)
                {
                    segm.push_back(mp(j - cnt, mp(0, sz(ids))));
                    segm.push_back(mp(j - 1, mp(1, sz(ids))));
                    ids.push_back(j - cnt);
                }
                cnt = 0;
            }
            else
                cnt++;
        }
    }
    sort(segm.begin(), segm.end());
    lo op = 0;
    FOR(i, sz(segm))
    {
        lo x = segm[i].first;
        lo t = segm[i].second.first;
        lo id = segm[i].second.second;
        if(!t)
        {
            if(x)
                fen[x - 1]++;
            op++;
        }
        if(i == sz(segm) - 1 || segm[i + 1].first != x || segm[i + 1].second.first == 1)
        {
            lo delta = op;
            for(lo j = x; j >= 0; j--)
            {
                delta -= fen[j];
                out = max(out, delta * (x - j + 1));
            }
        }
        if(t)
        {
            if(ids[id])
                fen[ids[id] - 1]--;
            op--;
        }
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif

      cin >> n >> m;

      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      can();
      cout << out;

}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

lo fen[MN][MN];
lo used[MN][MN];
lo n, m;

lo out = 0;
void can()
{

    FOR(i, n)
    {
        lo cnt = 0;
        FOR(j, m + 1)
        {
            if(!used[j][i])
            {
                if(cnt)
                {
                    fen[j - cnt][j - 1]++;
                }
                cnt = 0;
            }
            else
                cnt++;
        }
    }
    for(lo i = m; i > 0; i--)
    {
        for(lo j = 0; j + i - 1 < m; j++)
        {
            out = max(out, i * fen[j][i + j - 1]);
            fen[j][i + j - 2] += fen[j][i + j - 1];
            fen[j + 1][i + j - 1] += fen[j][i + j - 1];
        }
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif

      cin >> n >> m;
      //n = 500;
      //m = 500;
      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          //c = ((j & 1) ? '1' : '0');
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      can();
      cout << out;

}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

lo fen[MN];
lo used[MN][MN];
lo n, m;

lo out = 0;
void can()
{
    vector<pair<lo, pair<lo, lo> > > segm;
    vector<lo> ids;
    FOR(i, n)
    {
        lo cnt = 0;
        FOR(j, m + 1)
        {
            if(!used[j][i])
            {
                if(cnt)
                {
                    segm.push_back(mp(j - cnt, mp(0, sz(ids))));
                    segm.push_back(mp(j - 1, mp(1, sz(ids))));
                    ids.push_back(j - cnt);
                }
                cnt = 0;
            }
            else
                cnt++;
        }
    }
    sort(segm.begin(), segm.end());
    lo op = 0;
    FOR(i, sz(segm))
    {
        lo x = segm[i].first;
        lo t = segm[i].second.first;
        lo id = segm[i].second.second;
        if(!t)
        {
            if(x)
                fen[x - 1]++;
            op++;
        }
        if(i == sz(segm) - 1 || segm[i + 1].first != x || segm[i + 1].second.first == 1)
        {
            lo delta = op;
            for(lo j = x; j >= 0; j--)
            {
                delta -= fen[j];
                out = max(out, delta * (x - j + 1));
            }
        }
        if(t)
        {
            if(x)
                fen[x - 1]--;
            op--;
        }
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif

      cin >> n >> m;

      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      can();
      cout << out;

}


#pragma comment(linker, "/STACK:100000000000000")
#include <stdio.h>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string.h>
#include <cctype>
#include <cassert>
#include <ctime>
#define mp make_pair
#define pb push_back
#define lo int
#define li long long int
#define db long double
#define FOR(i, n) for(lo i = 0; i < (n); i++)
#define pi 3.14159265358979323
#define eps 1e-10
#define MN 5010
#define sz(a) (lo) (a).size()
#define SM 1<<6
using namespace std;
const li INF = 2e9;

lo fen[MN][MN];
lo used[MN][MN];
lo n, m;

lo out = 0;
void can()
{
    memset(fen, 0, sizeof fen);
    FOR(i, n)
    {
        lo cnt = 0;
        FOR(j, m + 1)
        {
            if(!used[j][i])
            {
                if(cnt)
                {
                    fen[j - cnt][j - 1]++;
                }
                cnt = 0;
            }
            else
                cnt++;
        }
    }
    for(lo i = m; i > 0; i--)
    {
        for(lo j = 0; j + i - 1 < m; j++)
        {
            out = max(out, i * fen[j][i + j - 1]);
            fen[j][i + j - 2] += fen[j][i + j - 1];
            fen[j + 1][i + j - 1] += fen[j][i + j - 1];
        }
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
#else
  //  freopen("roses.in", "r", stdin);
  //  freopen("roses.out", "w", stdout);
#endif

      cin >> n >> m;
      //n = 500;
      //m = 500;
      memset(used, 0, sizeof used);
      FOR(i, n) FOR(j, m)
      {
          if(!j)
              scanf("\n");
          char c;
          scanf("%c", &c);
          //c = ((j & 1) ? '1' : '0');
          if(c == '1')
          {
              used[j][i]++;
          }
      }
      can();
      cout << out;

}


#include<bits/stdc++.h>
#define PB push_back
#define MP make_pair
#define F first
#define S second
#define SZ(a) (int)(a.size())
#define CLR(a) a.clear()
#define SET(a,b) memset(a,b,sizeof(a))
#define TR(v,it) for( typeof(v.begin()) it(v.begin()) ; it != v.end() ; it++)
#define FOR(i,a,b) for(i=(int)a;i<(int)b;i++)
#define rep(i,n) FOR(i,0,n)

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector< PII > VPII;
string A[5000];
int fre[5001]={};
int curr[5000];
int main()
{
    int st,i,n,m;
    scanf("%d%d",&n,&m);
    rep(i,n)cin>>A[i];
    SET(curr,-1);
    fre[0] = n;
    LL ans=0;
    for(st=0;st<m;st++)
    {
        rep(i,m)
            fre[i] = fre[i+1];
        fre[m]=0;
        rep(i,n)
        {
            if(curr[i]<st)
            {
                curr[i]++;
                while( curr[i] < m && A[i][curr[i]] == '1'  )
                    curr[i]++;
                fre[curr[i] - st]++;
            }
        }
        LL nu=0;
        for(i = m; i >0; i--)
        {
            nu += fre[i];
            ans = max(ans , nu*i );
        }
    }
    cout<<ans<<endl;
    return 0;
}


#include<bits/stdc++.h>
#define PB push_back
#define MP make_pair
#define F first
#define S second
#define SZ(a) (int)(a.size())
#define CLR(a) a.clear()
#define SET(a,b) memset(a,b,sizeof(a))
#define TR(v,it) for( typeof(v.begin()) it(v.begin()) ; it != v.end() ; it++)
#define FOR(i,a,b) for(i=(int)a;i<(int)b;i++)
#define rep(i,n) FOR(i,0,n)

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector< PII > VPII;
string A[5000];
int fre[5001];
int curr[5000];
int main()
{
    int st,i,n,m;
    scanf("%d%d",&n,&m);
    rep(i,n)cin>>A[i];
    SET(curr,-1);
    SET(fre,0);
    fre[0] = n;
    LL ans=0;
    for(st=0;st<m;st++)
    {
        rep(i,m)
            fre[i] = fre[i+1];
        fre[m]=0;
        rep(i,n)
        {
            if(curr[i]<st)
            {
                curr[i]++;
                while( curr[i] < m && A[i][curr[i]] == '1'  )
                    curr[i]++;
                fre[curr[i] - st]++;
            }
        }
        LL nu=0;
        for(i = m; i >0; i--)
        {
            nu += fre[i];
            ans = max(ans , nu*i );
        }
    }
    cout<<ans<<endl;
    return 0;
}


#include<bits/stdc++.h>
#define PB push_back
#define MP make_pair
#define F first
#define S second
#define SZ(a) (int)(a.size())
#define CLR(a) a.clear()
#define SET(a,b) memset(a,b,sizeof(a))
#define TR(v,it) for( typeof(v.begin()) it(v.begin()) ; it != v.end() ; it++)
#define FOR(i,a,b) for(i=(int)a;i<(int)b;i++)
#define rep(i,n) FOR(i,0,n)

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector< PII > VPII;
string A[5000];
int fre[5001]={};
int curr[5000];
int main()
{
    int st,i,n,m;
    cin>>n>>m;
    rep(i,n)
        cin>>A[i];
    rep(i,n)
        curr[i] = -1;
    fre[0] = n;
    LL ans=0;
    for(st=0;st<m;st++)
    {
        rep(i,m) fre[i] = fre[i+1]; fre[m]=0;
        rep(i,n)
        {
            if(curr[i]<st)
            {
                curr[i]++;
                while( curr[i] < m && A[i][curr[i]] == '1'  )
                    curr[i]++;
                fre[curr[i] - st]++;
            }
        }
        LL nu=0;
        for(i = m; i >0; i--)
        {
            nu += fre[i];
            ans = max(ans , nu*i );
        }
    }
    cout<<ans<<endl;
    return 0;
}


#include <cstdio>
using namespace std;

int main() {
    int t;
    long long n, k;
    scanf("%d", &t);
    while(t --) {
        scanf("%lld %lld", &n, &k);
        int  ans = 0;
        while(n) {
            if(n % k == 0) {
                ans ++;
                n /= k;
            } else {
                n --;
                ans ++;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}


#include <cstdio>
using namespace std;

int main() {
    int t;
    long long n, k;
    scanf("%d", &t);
    while(t --) {
        scanf("%lld %d", &n, &k);
        int  ans = 0;
        while(n) {
            if(n % k == 0) {
                ans ++;
                n /= k;
            } else {
                n --;
                ans ++;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	scanf("%d",&t);
	while(t--){
		ll n,k;
		scanf("%lld%lld",&n,&k);
		if(k==1)
			printf("%lld\n",n);
		else if(n < k)
			printf("%lld\n",n);
		else if(n == k)
			printf("%d\n",2);
		else
		{
			ll ans = 0;
			while(1){
				while(n%k==0){
					n = n/k;
					ans++;
				}
				n = n-1;
				ans++;
				if(n==0)
					break;
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	scanf("%d",&t);
	while(t--){
		ll n,k;
		scanf("%lld%lld",&n,&k);
		if(k==1)
			printf("%lld\n",n);
		else if(n < k)
			printf("%lld\n",n);
		else
		{
			ll ans = 0;
			while(n>0){
				while(n%k==0){
					n = n/k;
					ans++;
				}
				n = n-1;
				ans++;
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	scanf("%d",&t);
	while(t--){
		ll n,k;
		scanf("%lld%lld",&n,&k);
		if(k==1)
			printf("%lld\n",n);
		else
		{
			ll ans = 0;
			while(n!=0){
				while(n%k==0){
					n = n/k;
					ans++;
				}
				n = n-1;
				ans++;
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	cin>>t;
	while(t--){
		ll n,k;
		cin>>n>>k;
		int ans = 0;
		while(n>=k){
			ans += n%k;
			n = n/k;
			ans++;
		}
		cout<<ans+n<<endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	cin>>t;
	while(t--){
		ll n,k;
		cin>>n>>k;
		ll ans = 0;
		while(n!=0){
			while(n%k==0){
				n = n/k;
				ans++;
			}
			n = n-1;
			ans++;
		}
		cout<<ans<<endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
    ll x=0;
    char c=getchar();
    bool flag=0;
    while(c<'0'||c>'9'){if(c=='-')flag=1;   c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
    return flag?-x:x;
}
int main(void){
	int t;
	t = read();
	while(t--){
		ll n,k;
		n = read();
		k = read();
		if(n < k)
			printf("%lld\n",n);
		else if(n == k)
			printf("%d\n",2);
		else
		{
			ll ans = 0;
			while(1){
				while(n%k==0){
					n = n/k;
					ans++;
				}
				n = n-1;
				ans++;
				if(n==0)
					break;
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	cin>>t;
	while(t--){
		ll n,k;
		cin>>n>>k;
		ll ans = 0;
		while(n){
			ans += n%k;
			n -= n%k;
			if(n){
				n = n/k;
				ans++;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void){
	int t;
	cin>>t;
	while(t--){
		ll n,k;
		cin>>n>>k;
		int ans = 0;
		while(n){
			ans += n%k;
			n -= n%k;
			if(n){
				n = n/k;
				ans++;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    int t;
	cin>>t;

	for(long long int i=0;i<t;i++){
	    long long int n,k,l=0;
		cin>>n>>k;
		while(n!=0){
			if(n%k==0){
				n=n/k;
				l++;
			}
			else {
			    l=l+n%k;
				n=n-n%k;

			}

		}
		cout<<l<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l=0;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>k;
		int l=0;
		while(n!=0){
			if(n%k==0){
				n=n/k;
				l++;
			}
			else {
			    l=l+n%k;
				n=n-n%k;

			}

		}
		cout<<l<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l=0;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>k;
		while(n!=0){
			if(n%k==0){
				n=n/k;
			}
			else n--;

			l++;
		}
		cout<<l<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l=0;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>k;
		while(n!=0){
			if(n%k==0){
				n=n/k;
			}
			else n--;

			l++;
		}
		cout<<l-1<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>k;
		while(n!=0){
			if(n%k==0){
				n=n/k;
			}
			else n--;

			l++;
		}
		cout<<l<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l=0;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>k;
		int l=0;
		while(n!=0){
			if(n%k==0){
				n=n/k;
			}
			else n--;

			l++;
		}
		cout<<l<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l;
	cin>>t;
	for(int i=0;i<t;i++){
		cin>>n>>k;
		while(n!=0){
			if(n%k==0){
				n=n/k;
			}
			else n--;

			l++;
		}
		cout<<l-1<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main(){
    long long int t,n,k,l=0;
	cin>>t;
	for(long long int i=0;i<t;i++){
		cin>>n>>k;
		int l=0;
		while(n!=0){
			if(n%k==0){
				n=n/k;
				l++;
			}
			else {
			    l=l+n%k;
				n=n-n%k;

			}

		}
		cout<<l<<endl;
	}
	return 0;
}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int q;
    long long int n,k;
    int i,step,r;
    cin >> i;

    while(i--)
    {
        step=0;
        cin >> n >> k;
        while(n>0)
        {

            if(n%k==0){
                n=n/k;
                step++;
            }
            else
            {
                r=n%k;
                step=step+r;
                n=n-r;
            }

        }
        cout << step << "\n";

    }

}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int q;
    long long int n,k;
    int i,step,r;
    cin >> i;

    while(i--)
    {
        step=0;
        cin >> n >> k;
        while(1)
        {

            if(n%k==0){
                n=n/k;
                step++;
            }
            else
            {
                r=n%k;
                step=step+r;
                n=n-r;
            }
            if(n==0)
                break;

        }
        cout << step << "\n";

    }

}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long int t,n,r,k,digit=0;
    cin >> t;
    while(t--)
    {
        digit=0;
        cin >> n >> k;
        if(n<k)
            digit=n;
        else if(n==k)
            digit=2;
        else if((n-k)<k)
            digit=n-k;
        else
        {
            while(n!=0)
            {

                digit++;
                if(n%k==0)
                    n=n/k;
                else
                {
                    r=n%k;
                    n=n-r;
                    digit=digit+r-1;

                }

            }
        }
        cout << digit <<"\n";
    }
}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int q;
    long long int n,k,step;
    int i,r;
    cin >> i;

    while(i--)
    {
        step=0;
        cin >> n >> k;
        while(1)
        {

            if(n%k==0){
                n/=k;
                step++;
            }
            else
            {
                r=n%k;
                step=+r;
                n-=r;
            }
            if(n==0)
                break;

        }
        cout << step << "\n";

    }

}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long int t,n,k,digit=0;
    cin >> t;
    while(t--)
    {
        digit=0;
        cin >> n >> k;

        while(n!=0)
        {
            digit++;
            if(n%k==0)
                n=n/k;
            else
                n-=1;
        }
        cout << digit <<"\n";
    }
}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int q;
    long long int n,k;
    int i,step;
    cin >> i;

    while(i--)
    {
        step=0;
        cin >> n >> k;
        while(n>1)
        {
            step++;

            if(n%k==0)
                n=n/k;
            else
                n--;

        }
        cout << step+1 << "\n";

    }

}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long int t,n,r,k,digit=0;
    cin >> t;
    while(t--)
    {
        digit=0;
        cin >> n >> k;
        if(n<k)
            digit=n;
        else if(n==k)
            digit=2;
        else
        {
            while(n!=0)
            {
                digit++;
                if(n%k==0)
                    n=n/k;
                else
                {
                    r=n%k;
                    n=n-r;
                    digit=digit+r-1;
                }
            }
        }
        cout << digit <<"\n";
    }
}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long int t,n,k,digit=0;
    cin >> t;
    while(t--)
    {
        digit=0;
        cin >> n >> k;

        if((n-k)<k)
            digit=n-k;
        else
        {
            while(n!=0)
            {
                digit++;
                if(n%k==0)
                    n=n/k;
                else
                    n-=1;
            }
        }
        cout << digit <<"\n";
    }
}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int q;
    long long int n,k,step;
    int i,r;
    cin >> i;

    while(i--)
    {
        step=0;
        cin >> n >> k;
        while(1)
        {

            if(n%k==0){
                n/=k;
                step++;
            }
            else
            {
                r=n%k;
                step+=r;
                n-=r;
            }
            if(n==0)
                break;

        }
        cout << step << "\n";

    }

}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long int t,n,k,digit=0;
    cin >> t;
    while(t--)
    {
        digit=0;
        cin >> n >> k;
        if(n<k)
            digit=n;
        else if(n==k)
            digit=2;
        else if((n-k)<k)
            digit=n-k;
        else
        {
            while(n!=0)
            {
                digit++;
                if(n%k==0)
                    n=n/k;
                else
                    n-=1;
            }
        }
        cout << digit <<"\n";
    }
}


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int q;
    long long int n,k;
    int i,step;
    cin >> i;

    while(i--)
    {
        step=0;
        cin >> n >> k;
        while(n>1)
        {

            if(n%k==0)
            {
                n=n/k;
                step++;
            }
            else {
                n--;
                step++;
            }
        }
        cout << step+1 << "\n";

    }

}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int jud(long long  n,long long k,int s){
	if(n==0)
	    return s;
	else{
	    if((n%k)==0)
	        jud(n/k,k,s+1);
	    else{
	    	s+=(n%k);
	    	jud(n-(n%k),k,s);
	    }
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%lld%lld",&n,&k);
		long long s=0;
		s=jud(n,k,s);
		cout<<s<<endl;
	}
	return 0;
}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%lld%lld",&n,&k);
		long long s=0;
		for(n;n>0;){
			if(n%k==0){
			    n=n/k;
				s++;
			}
			else{
				s=s+(n%k);
				n=n-(n%k);
			}
		}
		cout<<s<<endl;
	}
	return 0;
}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int jud(long long  n,long long k,int s){
	if(n==0)
	    return s;
	else{
	    if((n%k)==0)
	        jud(n/k,k,s+1);
	    else
	        jud(n-1,k,s+1);
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%I64d%I64d",&n,&k);
		if()
		long long s=0;
		s=jud(n,k,s);
		cout<<s<<endl;
	}
	return 0;
}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%lld%lld",&n,&k);
		long long s=0;
		for(n;n>0;){
			if(n%k==0){
			    n=n/k;
				s++;
			}
			else{
				n--;
				s++;
			}
		}
		cout<<s<<endl;
	}
	return 0;
}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int jud(long long  n,long long k,int s){
	if(n==0)
	    return s;
	else{
	    if((n%k)==0)
	        jud(n/k,k,s+1);
	    else
	        jud(n-1,k,s+1);
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%lld%lld",&n,&k);
		long long s=0;
		s=jud(n,k,s);
		cout<<s<<endl;
	}
	return 0;
}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int jud(long long  n,long long k,int s){
	if(n==0)
	    return s;
	else{
	    if((n%k)==0)
	        jud(n/k,k,s+1);
	    else
	        jud(n-1,k,s+1);
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%I64d%I64d",&n,&k);
		long long s=0;
		s=jud(n,k,s);
		cout<<s<<endl;
	}
	return 0;
}


#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int jud(long long  n,long long k,int s){
	if(n==0)
	    return s;
	else{
	    if((n%k)==0)
	        jud(n/k,k,s+1);
	    else{
	    	jud(n-(n%k),k,s+(n%k));
	    }
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long n,k;
		scanf("%lld%lld",&n,&k);
		long long s=0;
		s=jud(n,k,s);
		cout<<s<<endl;
	}
	return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        long long int n,k;
        cin>>n>>k;
        int st=0;
        while(n!=0)
        {
            if(n%k!=0)
              n--;
            else
            n=n/k;

           // cout<<n<<endl;
            st++;
        }
        cout<<st;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        unsigned long int st=0;
        while(n!=0)
        {
            if(n%k!=0)
              n--;
            else
            n=n/k;

           // cout<<n<<endl;
            st++;
        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        unsigned long int st=0;
        if(n<k)
        {
            cout<<n<<endl;
            return 0;
        }
        while(n!=0)
        {
            if(n%k!=0 && n>k)
              n--;
            else if(n%k!=0 && n<k)
            {
                st=st+n;
                break;
            }
            else
            n=n/k;
            st++;
        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        unsigned long int st=0;

        while(n!=0)
        {
            if(n%k!=0 && n>k)
              n--;
            else if(n%k!=0 && n<k)
            {
                st=st+n;
                break;
            }
            else
            n=n/k;
            st++;
        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;

    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        //cout<<n%k;
        unsigned long int st=0;

        while(n!=1)
        {
            if(n<k)
            {
                st=st+n-1;

               // cout<<st<<" "<<n<<endl;
                break;
            }
            else if(n%k==0)
            {
                while(n%k==0)
                {
                    st++;
                    n=n/k;
                   // cout<<st<<endl;
                   // cout<<" n "<<n<<endl;
                }

            }
            else if(n/k!=0)
            {
                st=st+n%k+1;
                n=n/k;
            }
           // cout<<st<<endl;

        }
        cout<<st+1<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        unsigned long int st=0;

        while(n!=0)
        {
            if(n%k!=0 && n>k)
              {
                  n=n-n%k;
                  st=st+n%k+1;
                  n=n/k;

              }
            else if(n%k!=0 && n<k)
            {
                st=st+n;
                break;
            }

        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;

    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        //cout<<n%k;
        unsigned long int st=0;

        while(n!=0)
        {
            if(n%k==0)
            {
                n=n/k;
                st++;
            }
            else if(n%k!=0 && n>k)
              {
                  st=st+n%k+1;

                  n=n/k;
                 // cout<<st<<endl;

              }
            else if(n%k!=0 && n<k)
            {
                st=st+n;
                break;
            }

        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        unsigned long int st=0;
        while(n!=0)
        {
            if(n%k!=0)
              n--;
            else
            n=n/k;

            st++;
        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;
    for(int i=0;i<t;i++)
    {
        unsigned long int n,k;
        cin>>n>>k;
        unsigned long int st=0;
        if(n<k)
        {
            cout<<n<<endl;
            return 0;
        }
        while(n!=0)
        {
            if(n%k!=0)
              n--;
            else
            n=n/k;
            st++;
        }
        cout<<st<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;

    for(int i=0;i<t;i++)
    {
        unsigned long long int n,k;
        cin>>n>>k;
         unsigned long long int st=0;

        while(n!=1)
        {
            if(n<k)
            {
                st=st+n-1;
                break;
            }
            else if(n%k==0)
            {
                while(n%k==0)
                {
                    st++;
                    n=n/k;

                }

            }
            else if(n/k!=0)
            {
                st=st+n%k+1;
                n=n/k;
            }

        }
        cout<<st+1<<endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int main()
{
    int t;
    cin>>t;

    for(int i=0;i<t;i++)
    {
        unsigned long long int n,k;
        cin>>n>>k;
         long int st=0;

        while(n!=1)
        {
            if(n<k)
            {
                st=st+n-1;
                break;
            }
            else if(n%k==0)
            {
                while(n%k==0)
                {
                    st++;
                    n=n/k;

                }

            }
            else if(n/k!=0)
            {
                st=st+n%k+1;
                n=n/k;
            }

        }
        cout<<st+1<<endl;
    }

    return 0;
}


    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int solve() {
        ll int n,k;
        cin>>n>>k;
        int count=0;
        while(n!=0) {
            if(n%k!=0) {
                count+=n%k;
                n-=n%k;
            }
            else {
                count+=1;
                n\=k;
            }
        }
        return count;
    }

    int main() {
        int t;
        cin>>t;
        while(t--) {
            cout<<solve()<<endl;
        }
        return 0;
    }


    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll int solve() {
        ll int n,k;
        cin>>n>>k;
        ll int count=0;
        while(n!=0) {
            if(n%k!=0 && n>=k) {
                count+=n%k;
                int g=n%k;
                n = n-n%k;
            }
            else if(n<k) {
                count+=n;
                n=0;
            }
            else {
                count+=1;
                n/=k;
            }
        }
        return count;
    }

    int main() {
        int t;
        cin>>t;
        while(t--) {
            cout<<solve()<<endl;
        }
        return 0;
    }


#include<bits/stdc++.h>
using namespace std;

int solve() {
    int n,k;
    cin>>n>>k;
    int count=0;
    while(n==0) {
        n-=1;
        if(n%k==0) n/=k;
        count+=1;
    }
    return count;
}

int main() {
    int t;
    cin>>t;
    while(t--) {
        cout<<solve()<<endl;
    }
    return 0;
}


    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int solve() {
        ll int n,k;
        cin>>n>>k;
        int count=0;
        while(n!=0) {
            if(n%k!=0 && n>=k) {
                count+=n%k;
                int g=n%k;
                n = n-n%k;
            }
            else if(n<k) {
                count+=n;
                n=0;
            }
            else {
                count+=1;
                n/=k;
            }
        }
        return count;
    }

    int main() {
        int t;
        cin>>t;
        while(t--) {
            cout<<solve()<<endl;
        }
        return 0;
    }


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int solve() {
    ll int n,k;
    cin>>n>>k;
    int count=0;
    while(n!=0) {
        if(n%k==0) n=n/k;
        else n-=1;
        count+=1;
    }
    return count;
}

int main() {
    int t;
    cin>>t;
    while(t--) {
        cout<<solve()<<endl;
    }
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
int solve() {
    ll int n,k;
    cin>>n>>k;
    int count=0;
    while(n!=0) {
        if((n%k)%1000000007==0) n=n/k;
        else n-=1;
        count+=1;
    }
    return count;
}

int main() {
    int t;
    cin>>t;
    while(t--) {
        cout<<solve()<<endl;
    }
    return 0;
}


    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int solve() {
        ll int n,k;
        cin>>n>>k;
        int count=0;
        while(n!=0) {
            if(n%k!=0) {
                count+=n%k;
                n-=n%k;
            }
            else {
                count+=1;
                n/=k;
            }
        }
        return count;
    }

    int main() {
        int t;
        cin>>t;
        while(t--) {
            cout<<solve()<<endl;
        }
        return 0;
    }


    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int solve() {
        ll int n,k;
        cin>>n>>k;
        int count=0;
        while(n!=0) {
            ll int rr = n%k;
            if(rr!=0) {
                count+=1;
                n-=rr;
            }
            // else if(n==1) return count;
            else {
                count+=1;
                n=n/k;
            }
        }
        return count;
    }

    int main() {
        int t;
        cin>>t;
        while(t--) {
            cout<<solve()<<endl;
        }
        return 0;
    }


#include <iostream>
using namespace std;

long long n, k;

int main(){
    int tc;
    cin >> tc;
    for(int i = 0; i < tc; ++i){
    	cin >> n >> k;
    	long long res = 0;
    	while(n > 0){
    	    if(n % k == 0){
    	        n /= k;
    	        ++res;
    	    }
    	    else{
    	        long long rem = n % k;
    	        res += rem;
    	        n -= rem;
    	    }
    	}

    	cout << res << endl;
    }
	return 0;
}


#include<bits/stdc++.h>

using namespace std;

long long n, k;

int main(){
    int tc;
    cin >> tc;
    for(int i = 0; i < tc; ++i){
    	cin >> n >> k;
    	long long res = 0;
    	while(n > 0){
    	    if(n % k == 0){
    	        n /= k;
    	        ++res;
    	    }
    	    else{
    	        long long rem = n % k;
    	        res += rem;
    	        n -= rem;
    	    }
    	}

    	cout << res << endl;
    }
	return 0;
}


#include <iostream>
using namespace std;
int main()
{
	long long n,k,m,i,t;
	cin>>t;

	for (i=1;i<=t;i++)
	{ cin>>n>>k;
		m=0;

	 do {
	  if (n%k==0) n/=k;
	  else n-=1;++m;
	  if (n<k)
	  {
	  	m+=n;
	  	break;
	  }

	 } while (n!=0);

      	cout<<m<<endl;
    }
    return 0;
}


#include <iostream>
using namespace std;
int main()
{
	long long n,k,m,i,t;
	cin>>t;

	for (i=1;i<=t;i++)
	{ cin>>n>>k;
		m=0;

	 do {
	  if (n%k==0) n/=k;
	  else n-=1;
	  ++m;
	 } while (n!=0);

      	cout<<m<<endl;
    }
    return 0;
}


#include <iostream>
using namespace std;
int main()
{
	long long n,k,m,i,t;
	cin>>t;

	for (i=1;i<=t;i++)
	{ cin>>n>>k;
		m=0;

	 do {
	  if (n%k==0) n/=k;
	  else n-=1;++m;
	  if (n<k)
	  {
	  	m+=k;
	  	break;
	  }

	 } while (n!=0);

      	cout<<m<<endl;
    }
    return 0;
}


#include <iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long long int n,k;
        cin>>n>>k;
        long long int count = 0;
        while(n!=0)
        {
            if(n%k!=0)
            {
                count +=(n%k);
                n -=n%k;                  //不能整除时，减去多余的
            }
            else
            {
                n = n/k;
                count++;
            }
        }
        printf("%lld\n",count);
    }
    return 0;
}


#include <iostream>
using namespace std;
int main()
{
	long long n,k,m,i,t;
	cin>>t;

	for (i=1;i<=t;i++)
	{ cin>>n>>k;
		m=0;

	 do {
	  if (n%k==0) n/=k;
	  else n-=1;++m;
	  if (n<k)
	  {
	  	m+=k-1;
	  	break;
	  }

	 } while (n!=0);

      	cout<<m<<endl;
    }
    return 0;
}


#include <iostream>
#include <string>

using namespace std;

int main()
{

	int t; cin >> t;
	for (int i = 0; i < t; i++) {
		long long n, k; cin >> n >> k;
		long long sum = 0;
		while (n >= k) {
			sum += n % k;
			sum++;
			n = n / k;
		}
		sum += n;
		cout << sum << endl;
	}

}


#include <iostream>
#include <string>

using namespace std;

int main()
{

	int t; cin >> t;
	for (int i = 0; i < t; i++) {
		long long n, k; cin >> n >> k;
		int sum = 0;
		while (n >= k) {
			sum += n % k;
			sum++;
			n = n / k;
		}
		sum += n;
		cout << sum << endl;
	}

}


#include <iostream>
#include<vector>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<map>
using namespace std;

int main() {
    long long k,l,m,n,o,p;

    cin >> k;

    for (long long i = 0; i < k; i++)
    {
        cin >> m >> l;
        n = 0;
        while (m != 0)
        {
            if (m % l == 0)
            {
                m = m / l, n++;
            }
            else n += m % l, m -= m % l;
        }
        cout << n << endl;
    }

}


#include <iostream>
#include<vector>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<map>
using namespace std;

vector<pair<int, int >> pr;

int main() {
    long long int k,l,m,n,o,p;

    cin >> k;
    vector <int> ans;
    for (int i = 0; i < k; i++)
    {
        cin >> m >> l;
        n = 0;
        while (m != 0)
        {
            if (m % l == 0)
            {
                m = m / l, n++;
            }
            else n += m % l, m -= m % l;
        }
        ans.push_back(n);
    }
    for(int i = 0; i < k; i++)
    {
        cout << ans[i]<< '\n';
    }
}


#include <iostream>
using namespace std;

int main()
{
    int numCases = 0;
    cin >> numCases;

    for (int i = 0; i < numCases; i++)
    {
        long long int n, k = 0;
        cin >> n;
        cin >> k;
        long long steps = 0;
        if (n > k)
        {
            while (n > 0)
            {
                if (n % k == 0)
                {
                    n /= k;
                    steps++;
                }

                else
                {
                    steps += n % k;
                    n -= n % k;
                }
            }

            cout << steps << endl;
        }

        else
        {
            cout << n << endl;
        }
    }

    return 0;
}


#include <iostream>
using namespace std;

int main()
{
    int numCases = 0;
    cin >> numCases;

    for (int i = 0; i < numCases; i++)
    {
        long long int n, k = 0;
        cin >> n;
        cin >> k;
        long long steps = 0;

        while (n > 0)
        {
            if (n % k == 0)
            {
                n /= k;
                steps++;
            }

            else
            {
                steps += n % k;
                n -= n % k;
            }
        }

        cout << steps << endl;
    }

    return 0;
}


#include <iostream>

using namespace std;

int findMin(long long int n, long long int k, long long int steps)
{
    if (n == 0)
    {
        return steps;
    }

    else
    {
        if (n % k == 0)
        {
            return findMin(n / k, k, steps + 1);
        }

        else
        {
            return findMin(n - 1, k, steps + 1);
        }
    }
}

int main()
{
    int numCases = 0;
    cin >> numCases;

    for (int i = 0; i < numCases; i++)
    {
        long long int n, k = 0;
        cin >> n;
        cin >> k;
        cout << findMin(n, k, 0) << endl;
    }

    return 0;
}


#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main()
{
  int n;
  long long a,b,c = 0,q[101];
  scanf("%i",&n);
  for(int i = 0; i < n;i++)
  {
    scanf("%lli",&a);
    scanf("%lli",&b);
    while(a != 0)
    {
      if(a % b == 0)
      {
        a /= b;
        c++;
      }
      else
      {
        c+=a%b;
        a -= a%b;
      }
    }
    q[i]=c;
    c = 0;
  }
  for(int i = 0; i < n;i++)
  {
    printf("%lli\n",q[i]);
  }
  return 0;
}


#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main()
{
  int n,c = 0,q[100];
  long long a,b;
  scanf("%i",&n);
  for(int i = 0; i < n;i++)
  {
    scanf("%lli",&a);
    scanf("%lli",&b);
    while(a != 0)
    {
      if(a % b == 0)
      {
        a /= b;
        c++;
      }
      else
      {
        a -= 1;
        c++;
      }
    }
    q[i]=c;
    c = 0;
  }
  for(int i = 0; i < n;i++)
  {
    printf("%i\n",q[i]);
  }
  return 0;
}


#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main()
{
  int n,a,b,c = 0;
  scanf("%i",&n);
  for(int i = 0; i < n;i++)
  {
    scanf("%i %i",&a,&b);
    while(a != 0)
    {
      if(a % b == 0)
      {
        a /= b;
        c++;
      }
      else
      {
        a -= 1;
        c++;
      }
    }
    printf("%i",c);
    c = 0;
  }
  return 0;
}


#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

int main()
{
  int n,c = 0,q[100];
  long long a,b;
  scanf("%i",&n);
  for(int i = 0; i < n;i++)
  {
    scanf("%lli",&a);
    scanf("%lli",&b);
    while(a != 0)
    {
      if(a % b == 0)
      {
        a /= b;
        c++;
      }
      else
      {
        c+=a%b;
        a -= a%b;
      }
    }
    q[i]=c;
    c = 0;
  }
  for(int i = 0; i < n;i++)
  {
    printf("%i\n",q[i]);
  }
  return 0;
}


#include<functional>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<deque>
#include<stack>
#include<list>
#include<set>
#include<map>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
	int n;
	long long a, b;
	cin >> n;
	while (n--) {
		cin >> a >> b;
		int ans = 0;
		while (a > 0) {
			if (a % b == 0) {
				a /= b;
				ans++;
			}
			else {
				ans += a % b;
				a -= a % b;
			}
		}
		cout << ans << endl;
	}
	return 0;
}


#include<functional>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<deque>
#include<stack>
#include<list>
#include<set>
#include<map>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
	int n;
	long long a, b;
	cin >> n;
	while (n--) {
		cin >> a >> b;
		int ans = 0;
		while (a > 0) {
			if (a % b == 0) {
				a /= b;
			}
			else {
				a--;
			}
			ans++;
		}
		cout << ans << endl;
	}
	return 0;
}


#include<functional>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<deque>
#include<stack>
#include<list>
#include<set>
#include<map>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
	int n;
	long long a, b;
	cin >> n;
	while (n--) {
		cin >> a >> b;
		long long ans = 0;
		while (a > 0) {
			if (a % b == 0) {
				a /= b;
				ans++;
			}
			else {
				ans += a % b;
				a -= a % b;
			}
		}
		cout << ans << endl;
	}
	return 0;
}


#include			  <algorithm>
#include			   <iostream>
#include				<cstring>
#include				<stdio.h>
#include				 <string>
#include			     <vector>
#include				 <time.h>
#include				  <queue>
#include				  <cmath>
#include				    <map>
#include				    <set>
using	namespace	    	 std;
typedef	long long    		  vt;
typedef unsigned long long   vt2;
typedef	pair<vt,vt>		     PVV;
typedef	pair<char,vt>	     PCV;
typedef	pair<string, vt>     PSV;
typedef	map<vt,vt>			 MVV;
typedef map<char,vt>	     MCV;
typedef map<string,vt>	     MSV;
#define	T true
#define F false
#define fi(x,y) for(int i=x;i<y;i++)
#define fj(x,y) for(int j=x;j<y;j++)
#define fk(x,y) for(int k=x;k<y;k++)
#define MAXP 2000010
#define LL __int64
const int MAXN = 1e6 + 99, INF = 0x3f3f3f3f;
vt HASHprime = 13331;//7,97,997,9973,99991,999983,131,13331
////////////////////////////////////////////////////////////
int ccc = 0;
int flag = 0;
void fo(vt2& x,vt2 k)
{
	string str;
	vt2 cnt = 0;
	vt2 bef = x;
	k--;
	while (cin >> str&&ccc--&&str[0]!='e')
	{
		if (str[0] == 'a')
		{
			if (x == 4294967295)
			{
				flag = 1;
				return;
			}
			++x;
		}
		else
		{
			vt2 temp;
			cin >> temp;
			fo(x, temp);
		}
		if (ccc == 0)
			break;
	}
	bef = x-bef;
	while (k--)
	{
		if ((unsigned long long)(4294967295 - x) < bef)
		{
			flag = 1;
			return;
		}
		x += bef;
	}
}
int main()
{
	vt2 x = 0;
	cin >> ccc;
	fo(x, 1);
	if (x > 4294967295)
		flag = 1;
	if (!flag)
		cout << x << endl;
	else
		cout << "OVERFLOW!!!" << endl;
	return 0;
}
/*

							. .........
							..,OOOO]]..... .. .
						  ...O@O/OOO@@@@].......
						  ...@@^/\\]o][@@@@\.....
						   ..@@O//oooooo\/OOOO`......
						   ..@@@//ooooooo`oo/OOO\.....
						   ..=@@^ooooooooooo/o/\OOO]....
							..@@O\oooooooooooooo[/OOO\....
							..=@@ooooooooooooooooo\\oOOO`...
							...O@Ooooooooooooooooooo/o[OOO\.....
							...=@@^]ooooooooooooooooo/o\/\OO^... . .
							 ...\@O=ooooooooooooooooooooooooOO\.....
							 . ..@@Ooooooooooooooooooooooo/o/\OOO`....
							   ..=@@O\/\ooooooooooooooooooooo]/\OOO\.....
				..  ......... ....\@@/]/ooooooooooooooooooooooo///\OO\......
		  .... .....,]]OO]O\`......O@@/oooooooooooooooooooooooooooo^OOO\......
		  ....,@@@@@@@@OO/[O@@@]....O@O/o=ooooooooooooooooooooooooooo\OOO`......
		  ...=@@@Oooo\/\/OOO]/O@@@\`.@@\oooooooooooooooooooooooooooooo/oOOO^....
		  ...=@@/\oo/@@@@@O@@@@O][@@@@@@\\ooooooooooooooooooooooooooooooooOOO`... ..
		  ...@@Oooooo=@@OOOOOOO@@@@OOO@@@\\/oooooooooooooooooooooooooo\o\oo\O@O].... .  ..
		  ..,@@ooooo//@@OOOOOOOOOOO@@@@@@@O`oooooooooooooooooooooooooooooo/ooO@@@@@]...... ...
		  ..=@@/ooooooO@@OOOOOOOOOOO@@@@@@@\ooooooooooooooooooooooooooooooooooO@@@@@@@@\`..... .
		 ...=@@ooooooo/@@OOOOOOOO@@@@@@@@@@@O/\/oooooooooooooooooooooooooooooo//@@@@@@@@@@@\`.......   .
		  ..@@O\ooooooo\@@OOOOO@@@@@@@OOOOOO@@OO/\/ooooooooooooooooooooooooooo/o=@@@@@@@@@@@@@@]....   ..
		  ..@@\ooooooo\o=@@OO@@@@@@OOOOOOOOOOO@@@O\\oooooooooooooooooooooooooo/oooO@@@@@@@@@@@@@@@]......
		  .,@@^ooooooooo\O@@@@@OOOOOOOOOOOOOOOOOO@@@O/o/oooooooooooooooooooooooooo/O@@@@@@@@@@@@@@@@@`...   ..
		 ..=@@ooooooo/o/@@@@OOOOOOOOOOOOOOOOOOOOOOO@@@O/\/ooooooooooooooooooooooooo^O@@@@@@@@@@@@@@@@@@`......
		  .=@@o\oo/o//@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@O/\oooooooooooooooooooooooo^O@@@@@@@@@@@@@@@@@@@@`.....
		  .=@@oooo^/O@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@\\//o\oooooooooooooooOOoOoO@@@@@@@@@@@@@@@@@@@@@`.....
		  .=@@oo\=O@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@O/o/oooooooooooOoooOOooOO@@@@@@@@@@@@@@@@@@@@@@@`....
		  .=@@/\oO@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@O/ooooooOoOOOOOoOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^...
		  .=@@\O@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@\ooooOoOoOO@@@@@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@@`....
		  .=@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@OoO@@@@@@@@OOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@\....
		  .,@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@@@OOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\....
		  .=@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@@OOOOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`..
	   ...=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@OOOOOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`..
	  .../O@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@OOOOOOOOOOOOOO@@@@@@OOOOOOOOOOOO@@@@@@@@@@@@@@@@@@`...
	....=O@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@@@@@@@@@@@@^..
	.../OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@OOO@@@@@@@@@@@@@@^.
	..=O@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@OOoOOOOOOO@@@@@@@@@@@`..
	..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOO@@OoOOOOOOOOoooO@@@@@@@@..
  ...O@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OoooOOO@@OOoOoOOOOOooooO@@@@@@O... .
  ..=O@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOOOOOO@@@@OoooOOOOO@@OooOOOOOOoOoOOOoO@@@@@\.. .
  ..O@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOOOOO@@@OOooOOoOOooo@@@oOOOOOOOoOoOOoOoO@@@@@\...
  .,@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOOOO@@@OOoOOOooOOoOoOO@@OoOOOOOOoOoOOOOOOO@@@@@\ .
.../@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOOO@@@OooOOOOooooooOoOO@@@oOOOOOOOoooOOOOooO@@@@@^...
...O@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOOOOOOOOOOOOOOOOOOOO@@@OooOoOOOOooooooOOOo@@@OOoOOOOOOOOOOOOOOoO@@@@@`..
  =O@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOOOOO@@@OooOOoOOOOOOOOOoOOooOO@@OOoOOooOOooOooOOOoOO@@@@@`.kgj
..=@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@oOoOOOOOoooOOOOOooOOOO@@Oooooooo/\/\//oooooO@@@@@@...
..O@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@OoOoooOoooOOooOOOOOOo@@@/oooo/oooooooooooo/@@@@@@@..
..O@OOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@ooO@@@OOoOOOOoooooooOOOOoo@@@\/oooooooooooooooo\O@@@@@@\.
..@@OOOOOOOO@@O@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@OOooo=@@@OoOOOOoooooooOOo\//O@O@@@\/\\oooooooooo\oO@@@@@@@^..
.=@@OOOOOOO@@@OO@@@@@@OOOOOOOOOOOOOOOOOOOO@OOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@Oooo/@@@@@OoOoooOoooooooo\O@@@OOOO@@@\\ooooooooooo=/@@@@@@@O..
.=O@OOOOOOO@@@OO@@@@@@@OOOOOOOOOOOOOOO@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOO@@@OoooO@@@@O@@@@@@Oooooooo\oO@@@O/ooOOOO@@O/ooooooooo=ooO@@@@@@@^..
.=O@OOOOOOO@@@OO@@@@@@@OOOOOOOOOOOO@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOO@@OoOOO@@@OOOOOOO@@@@@@@@@O]O@@@@ooo/..,OOO@@@\\ooooooooooO@@@@@@@O...
.=OOOOOOOO@@@@OOO@@@@@@OOOOOOOOOO@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOO@@@OOOO@@@@OOOOOOOOOOOOOOO@@@@@@@oooooo`...OOO@@@/ooooooooooO@@@@@@@O^..
..@@OOOOOOO@@@@@O@@@@@@@OOOOOOOO@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOO@@OOOOO@@@OOOOOOOOOOOOOoooooooooooooooooo\../OOO@@\^^ooooooooO@@@@@@@@^..
..@@@OOOOOOO@@@@@@@@@@@@OOOOOOOO@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOO@@OoooO@@@OOOOOOOOOOOOooooooooooooooooooooOOOOOOO@@@=oooooooo\O@@@@@@@@\..
..O@@OOOOO@@@@@@@@@@@@@OOOOOOOO@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOO@@OOooO@@@OOOOOOOOOOOoooooooooooooooooooooooOOOOOO@@@^oooooooo=@@@@@@@@@@....
..O@@OOO@@@@@@@@@@@@@@@@OOOOO@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOO@@@OOOOoO@@@OOOOOOOOOoooooooooooooooooooooooooOOOOOOO@@oooooooo^O@@@@@@@@@@^...
.,@@@OOOOOOOOOOOO@@@@@@@OOOO@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOO@@OoOOOOo@@@OOOOOOOOoooooooooooooooooooooooooooOOOOOO@@@\/ooooo/\O@@@@@@@@@@@\....
.@@@OO@OOOOOOOOOOOO@@@@@@O@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOO@@OooOOoOo@@@OOOOOOoooooooooooooooooooooooooooooOOOOOO@@O\ooooo\//@@@@@@@@@@@@@@`....
=@@@@@OOOOOOOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOO@@OooOOOOOO@@@OOOOOOoooooooooooooooooooooooooooooOOOOO@@@\\/ooooo^O@@@@@@@@@@@@@@@@`......
=@@@@OOOOOOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOO@@@OOOOoOoooO@@@OOOOOOOooooooooooooooooooooooooooOOOOOOO@@//oooooo\O@@@@@@@@@@@@@@OOOOO]....
=@@@@OOOOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOO@@@oooOOooooooO@@OOOOOOOoooooooooooooooooooooooooOOOOOOO@@O\oooooo/O@@@@@@@@@@@@@@@@@@OOO@^....
,@@@@OOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOO@@@oOooooooooooo@@@OOOOOOOOooooooooooooooooooooOOOOOOOO@@@/\\\ooooo/@@@@@@@@@@@@@@@@@@@@@OO@O...
.=@@@@OOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOO@@@ooOOooooooooooo@@@OOOOOOOOOOooooooooooooooOOOOOOOOO@@@@/o/oooooooO@@@@@@@@@@@@@@@@@@@@@@@OOO`.......
..@@@@@OOOO@@@@@@@OOOO@@@OO@@@@@@@@@@@@@@@@OOOOOOOOO@@OoooOOoooooooooooo@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@/\\o\ooooo/@@@@@@@@@@@@@@@@@@@@@@@@@@@OO\........ ..  .
..=@@@@@@@@@@@@@@OOOO@@@@@@@@@@@@@@@@@@@@@@OOOOOOOO@@@ooOoOOOOoooooooooo/O@OOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@`/,o/ooooo\O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O]]............... .
  .\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOO@@@oOoOoooOoOooooooooo\o/O@@@@@@OOOOOOOOOOOO@@@@@@@@@O/\\\o/oooo//\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOO@@@@@]]]`........    ..
  ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOO@@@ooooOOOoOOOooooooooo\/\/\o][O@@@@@@@@@@@@@@@@@O/\\\/ooooooooo/O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOO@@@@@@]]............
  ..,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOO@@OoOOOOOOOoooooooooooooooooooo\ooo]/o/[[o\\=oo\/o]ooooooooooo/O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Oo\\/O@OOOOOOOOOOOOOOOOOOOOO@@@@]].....
  ...=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@OOOooOOoooooooooooooooooooooooo\ooooooooooooooooooooooooo\/@@@@@@@@@@@@@@@@O[]@@/[\OO@@@@@@@@@@OOOOOO@O*..,[[[\OOOOOOOOOOOOOOOOOO@@@@
	..=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OoOooooooooooooooooooooooooooooooooooooooooooooooo\@@@@@@@@@@@@@@/\/@@@[.]@@@@OOOO`...**[[[[[[/[*****..****,oooOOOOOOO/*..*\OOO
	...,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Ooooooooooooooooooooooooooooooooooooooooooo/\O@@@@@@@@@@@@@O@@@/`.]@@@OOOOOOOOOOO\]*****,[*.*..*...*******oooOOOOOO\*.../OOO
	 ....\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\\ooooooooooooooooooooooooooooooooooo/]O@@@@@@@@@@@@@@@/`..]@@@OOOOOOOOOOOOOOOOO/*****..*********]]/o/oooOOOOOOOOOOOOOOO@
	  ....,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@@@@OO\]ooooooooooooooooooooo/o[o/O@@@@@@@@@@@@@@@[..,]@@@OOOOOOOOOOOOOOOOOOOOO/*********]]oooooooOOOOOOOOOOOOOOOOO@@@@@
		  ..,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOO@@@@@@@@@O/\]o[\/\ooo[\ooOO@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOooooooo/ooooOOOOOOOOOOOOOOOOOOOOO@@@@@@@`..
		  .....[@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@[......
			  .....,[\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O[[O@@@@OOOOOOOOOOOOOOOOOOOOOO@@@@@@@@@@@@@@OOOOOO/[[oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@/.......
					........[[[O@@@@@@@@@@@@@@@@@@@@@OO\/\ooo/o\@@@@@@@@@@@@@@@@@@@@@@@@@@@O@@@@OOOOOOOO[**.*.......,[\OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@/`......  .
						 .  ..............,[\@@@@@@@OOO]/\ooooo/oO@\.................,]OO@OOOOOOOOOO/*......**.............**[[\OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@@@@@[\@@@@\]`.........
									  ..........,....,@@@@@@OOOOOOO@@O@\............,@[\@@@@OOOOOOOOO]`**........................*[\OOOOOOOOOOOOOOOOOOOOOO@@@@@@@@/`...........[[O@O\]...
												.....@@OOOOOOOOO@@OO@@OO@\..     ...[[\@@@@O/[OO@@@OOOOOOOOO\]`*.........*.*.........,OOOOOOOOOOOOOOO@@@@@@@@@/`......       ..........,[
												.....@@OOOOOOO@@OOOOOO@OO@\....    ........,[\@@@]].[\@@@@@OOOOOOOOO\]]`*..........*,/OOOOOOOOOOO@@@@@@@@@[.....                        .
													.=@@OOOOOO@OOOOOOOO@OO@^..        ....  ......[\@@@\]]*[\@@@@@@@OOOOOOOOOO\]/OOOOOOOOOOOO@@@@@@@@/`........
												   ....,\@@@OO@OOOOOOOO@@@/...              .............,[@@@@O]/[\@@@@@@@@@OOOOOOOOOOOO@@@@@@@@[.......
													  ......,\@@@@@@@@O\@\..                             ........,[\@@@O]/[[O@@@@@@@O@@@@@@@@`......

*/