class Solution {
public int search(int[] nums, int target) {
int left =0;
int right = nums.length-1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid]==target){
return mid;
} else if(target<nums[mid]){
right = mid-1;
} else if(nums[mid]<target){
left = mid+1;
}
}
return -1;
}
}
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
int fast = 0;
int slow = 0;
for(;fast<len;fast++){
if(nums[fast]!=val){
nums[slow++] = nums[fast];
}
}
return slow;
}
}
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
int fast = 0;
int slow = 0;
while(fast<len){
if(nums[fast]!=val){
nums[slow++] = nums[fast];
}
fast++;
}
return slow;
}
}
class Solution {
public int[] sortedSquares(int[] nums) {
int len = nums.length;
int[] res = new int[len];
int p = len-1;
int left = 0;
int right = len - 1;
while(left<=right){
int ll = nums[left] * nums[left];
int rr = nums[right] * nums[right];
if(rr>=ll){
res[p--] = rr;
right--;
} else {
res[p--] = ll;
left++;
}
}
return res;
}
}
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int res = Integer.MAX_VALUE;
int left = 0;
int right = 0;
int sum =0;
for(;right<nums.length;right++){
sum+=nums[right];
while(sum>=target){
res = Math.min(right-left+1,res);
sum-=nums[left++];
}
}
return res ==Integer.MAX_VALUE? 0 : res;
}
}
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int arr[] = new int[n];
int psum[] = new int[n];
arr[0] = in.nextInt();
psum[0] = arr[0];
for(int i=1;i<n;i++){
arr[i] = in.nextInt();
psum[i] = arr[i]+psum[i-1];
}
while(in.hasNextInt()){
int left = in.nextInt();
int right = in.nextInt();
if(left ==0){
System.out.println(psum[right]);
} else {
System.out.println(psum[right]-psum[left-1]);
}
}
}
}
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int sum = 0;
int[][] arr = new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
arr[i][j] = in.nextInt();
sum+=arr[i][j];
}
}
// 统计横向
int[] hor = new int[n];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
hor[i] +=arr[i][j];
}
}
// 统计纵向
int[] ver = new int[m];
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
ver[j] +=arr[i][j];
}
}
int res = Integer.MAX_VALUE;
int horCut = 0;
for(int i=0;i<n;i++){
horCut +=hor[i];
res = Math.min(res,Math.abs(sum - 2*horCut));
}
int verCut = 0;
for(int j=0;j<m;j++){
verCut +=ver[j];
res = Math.min(res,Math.abs(sum - 2*verCut));
}
System.out.println(res);
}
}